Skip to content

Commit a8ac00d

Browse files
authored
Merge pull request #5 from dfayale/coming-soon
Add "Coming Soon"
2 parents 63a9a0a + ec5e0ef commit a8ac00d

File tree

4 files changed

+155
-102
lines changed

4 files changed

+155
-102
lines changed

src/app/favicon.ico

-10.3 KB
Binary file not shown.

src/app/globals.css

Lines changed: 91 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55
--foreground: #171717;
66
}
77

8-
@theme inline {
9-
--color-background: var(--background);
10-
--color-foreground: var(--foreground);
11-
--font-sans: var(--font-geist-sans);
12-
--font-mono: var(--font-geist-mono);
13-
}
148

159
@media (prefers-color-scheme: dark) {
1610
:root {
@@ -24,3 +18,94 @@ body {
2418
color: var(--foreground);
2519
font-family: Arial, Helvetica, sans-serif;
2620
}
21+
22+
/* Subtle conic-gradient "ominous" motion */
23+
.bg-ominous {
24+
background: radial-gradient(1200px 800px at 20% 10%, rgba(120, 119, 198, 0.15), transparent 60%),
25+
radial-gradient(1000px 800px at 90% 90%, rgba(56, 189, 248, 0.12), transparent 60%),
26+
conic-gradient(from 180deg at 50% 50%, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0.0) 25%, rgba(255, 255, 255, 0.03) 50%, rgba(255, 255, 255, 0.0) 75%, rgba(255, 255, 255, 0.03));
27+
animation: swirl 18s linear infinite;
28+
}
29+
30+
@keyframes swirl {
31+
0% {
32+
filter: hue-rotate(0deg) saturate(100%);
33+
transform: scale(1) rotate(0deg);
34+
}
35+
36+
50% {
37+
filter: hue-rotate(10deg) saturate(110%);
38+
transform: scale(1.01) rotate(0.5deg);
39+
}
40+
41+
100% {
42+
filter: hue-rotate(0deg) saturate(100%);
43+
transform: scale(1) rotate(1deg);
44+
}
45+
}
46+
47+
/* Floating orbs for depth */
48+
.orb {
49+
background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.05) 40%, transparent 60%);
50+
filter: blur(24px) saturate(120%);
51+
border-radius: 9999px;
52+
animation: float 12s ease-in-out infinite alternate;
53+
}
54+
55+
.orb-purple {
56+
background-color: rgba(120, 119, 198, 0.2);
57+
}
58+
59+
.orb-blue {
60+
background-color: rgba(56, 189, 248, 0.18);
61+
}
62+
63+
@keyframes float {
64+
0% {
65+
transform: translate3d(0, 0, 0) scale(1);
66+
}
67+
68+
100% {
69+
transform: translate3d(4%, -3%, 0) scale(1.05);
70+
}
71+
}
72+
73+
/* Scanline overlay */
74+
.scanlines {
75+
background-image: repeating-linear-gradient(to bottom,
76+
rgba(255, 255, 255, 0.06) 0px,
77+
rgba(255, 255, 255, 0.06) 1px,
78+
transparent 1px,
79+
transparent 3px);
80+
animation: drift 8s linear infinite;
81+
}
82+
83+
@keyframes drift {
84+
from {
85+
background-position-y: 0px;
86+
}
87+
88+
to {
89+
background-position-y: 8px;
90+
}
91+
}
92+
93+
/* Vignette for focus */
94+
.vignette {
95+
box-shadow: inset 0 0 180px 60px rgba(0, 0, 0, 0.35);
96+
}
97+
98+
/* Blinking caret */
99+
.caret {
100+
width: 0.6ch;
101+
}
102+
103+
.blink {
104+
animation: blink 1.2s steps(1, end) infinite;
105+
}
106+
107+
@keyframes blink {
108+
50% {
109+
opacity: 0;
110+
}
111+
}

src/app/layout.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ const geistMono = Geist_Mono({
1313
});
1414

1515
export const metadata = {
16-
title: "Create Next App",
17-
description: "Generated by create next app",
16+
title: "DFA Yale",
17+
description: "A whole new experience... coming soon.",
1818
};
1919

2020
export default function RootLayout({ children }) {

src/app/page.js

Lines changed: 62 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,71 @@
1-
import Image from "next/image";
1+
"use client";
2+
3+
import { useEffect, useState } from "react";
24

35
export default function Home() {
6+
const finalPhrase = "Great things are coming";
7+
const [typed, setTyped] = useState("");
8+
9+
useEffect(() => {
10+
const typeDelay = 80; // ms per character while typing
11+
const pauseBeforeBack = 900; // pause after full phrase
12+
const backDelay = 55; // ms per character while deleting
13+
14+
const timeouts = [];
15+
16+
// Type forward
17+
for (let i = 1; i <= finalPhrase.length; i++) {
18+
timeouts.push(
19+
setTimeout(() => setTyped(finalPhrase.slice(0, i)), i * typeDelay)
20+
);
21+
}
22+
23+
const afterType = finalPhrase.length * typeDelay + pauseBeforeBack;
24+
25+
// Backspace
26+
for (let i = finalPhrase.length - 1; i >= 0; i--) {
27+
const step = finalPhrase.length - i;
28+
timeouts.push(
29+
setTimeout(() => setTyped(finalPhrase.slice(0, i)), afterType + step * backDelay)
30+
);
31+
}
32+
33+
// After animation completes, show final phrase again for readability
34+
const total = afterType + finalPhrase.length * backDelay + 300;
35+
timeouts.push(
36+
setTimeout(() => setTyped(finalPhrase), total)
37+
);
38+
39+
return () => {
40+
timeouts.forEach(clearTimeout);
41+
};
42+
}, [finalPhrase]);
443
return (
5-
<div className="font-sans grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20">
6-
<main className="flex flex-col gap-[32px] row-start-2 items-center sm:items-start">
7-
<Image
8-
className="dark:invert"
9-
src="/next.svg"
10-
alt="Next.js logo"
11-
width={180}
12-
height={38}
13-
priority
14-
/>
15-
<ol className="font-mono list-inside list-decimal text-sm/6 text-center sm:text-left">
16-
<li className="mb-2 tracking-[-.01em]">
17-
Get started by editing{" "}
18-
<code className="bg-black/[.05] dark:bg-white/[.06] font-mono font-semibold px-1 py-0.5 rounded">
19-
src/app/page.js
20-
</code>
21-
.
22-
</li>
23-
<li className="tracking-[-.01em]">
24-
Save and see your changes instantly.
25-
</li>
26-
</ol>
44+
<div className="relative min-h-screen overflow-hidden bg-[var(--background)] text-[var(--foreground)]">
45+
{/* Ambient animated background */}
46+
<div aria-hidden className="pointer-events-none absolute inset-0 bg-ominous" />
47+
<div aria-hidden className="pointer-events-none absolute inset-0 scanlines mix-blend-overlay opacity-20" />
48+
<div aria-hidden className="pointer-events-none absolute inset-0 vignette" />
49+
<div aria-hidden className="pointer-events-none absolute -top-24 -left-24 size-[60vmax] orb orb-purple" />
50+
<div aria-hidden className="pointer-events-none absolute -bottom-32 -right-16 size-[45vmax] orb orb-blue [animation-delay:700ms]" />
51+
52+
{/* Content */}
53+
<main className="relative z-10 flex min-h-screen flex-col items-center justify-center px-6 text-center">
54+
<div className="mb-8 text-xs uppercase tracking-[0.35em] opacity-70">DFA Yale</div>
55+
<h1 className="text-pretty text-5xl sm:text-6xl md:text-7xl font-semibold tracking-tight">
56+
{typed}
57+
<span aria-hidden className="ml-2 inline-block caret blink">_</span>
58+
</h1>
59+
<p className="mt-6 max-w-xl text-balance text-sm sm:text-base opacity-80">
60+
A whole new experience is on the way. We’re crafting something a little different—stay tuned!
61+
</p>
2762

28-
<div className="flex gap-4 items-center flex-col sm:flex-row">
29-
<a
30-
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:w-auto"
31-
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
32-
target="_blank"
33-
rel="noopener noreferrer"
34-
>
35-
<Image
36-
className="dark:invert"
37-
src="/vercel.svg"
38-
alt="Vercel logomark"
39-
width={20}
40-
height={20}
41-
/>
42-
Deploy now
43-
</a>
44-
<a
45-
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 w-full sm:w-auto md:w-[158px]"
46-
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
47-
target="_blank"
48-
rel="noopener noreferrer"
49-
>
50-
Read our docs
51-
</a>
63+
<div className="mt-10 flex items-center gap-4 opacity-90">
64+
<span className="h-px w-12 bg-current/40" />
65+
<span className="text-xs uppercase tracking-widest">Coming soon</span>
66+
<span className="h-px w-12 bg-current/40" />
5267
</div>
5368
</main>
54-
<footer className="row-start-3 flex gap-[24px] flex-wrap items-center justify-center">
55-
<a
56-
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
57-
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
58-
target="_blank"
59-
rel="noopener noreferrer"
60-
>
61-
<Image
62-
aria-hidden
63-
src="/file.svg"
64-
alt="File icon"
65-
width={16}
66-
height={16}
67-
/>
68-
Learn
69-
</a>
70-
<a
71-
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
72-
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
73-
target="_blank"
74-
rel="noopener noreferrer"
75-
>
76-
<Image
77-
aria-hidden
78-
src="/window.svg"
79-
alt="Window icon"
80-
width={16}
81-
height={16}
82-
/>
83-
Examples
84-
</a>
85-
<a
86-
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
87-
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
88-
target="_blank"
89-
rel="noopener noreferrer"
90-
>
91-
<Image
92-
aria-hidden
93-
src="/globe.svg"
94-
alt="Globe icon"
95-
width={16}
96-
height={16}
97-
/>
98-
Go to nextjs.org →
99-
</a>
100-
</footer>
10169
</div>
10270
);
10371
}

0 commit comments

Comments
 (0)