Signed in as
diff --git a/src/app/globals.css b/src/app/globals.css
index 1a2958b..ab9f289 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -227,99 +227,6 @@
}
@layer utilities {
- .glass-surface {
- background: linear-gradient(
- 180deg,
- oklch(1 0 0 / 0.78),
- oklch(0.985 0.003 247 / 0.92)
- );
- border: 1px solid oklch(0.89 0.005 247 / 0.95);
- border-radius: calc(var(--radius) + 0.5rem);
- box-shadow: 0 10px 30px oklch(0.3 0.01 260 / 0.08);
- backdrop-filter: blur(18px) saturate(1.08);
- }
- .dark .glass-surface {
- background: linear-gradient(
- 180deg,
- oklch(0.23 0.015 265 / 0.72),
- oklch(0.18 0.012 265 / 0.88)
- );
- border-color: oklch(1 0 0 / 0.09);
- box-shadow: 0 18px 40px oklch(0 0 0 / 0.35);
- }
- .glass-panel {
- background: linear-gradient(
- 180deg,
- oklch(1 0 0 / 0.84),
- oklch(0.992 0.002 247 / 0.96)
- );
- border: 1px solid oklch(0.89 0.005 247 / 0.95);
- border-radius: calc(var(--radius) + 0.75rem);
- box-shadow: 0 14px 36px oklch(0.3 0.01 260 / 0.08);
- backdrop-filter: blur(20px) saturate(1.08);
- }
- .dark .glass-panel {
- background: linear-gradient(
- 180deg,
- oklch(0.22 0.014 265 / 0.78),
- oklch(0.17 0.012 265 / 0.9)
- );
- border-color: oklch(1 0 0 / 0.1);
- box-shadow: 0 22px 48px oklch(0 0 0 / 0.36);
- }
- .glass-subtle {
- background: oklch(0.98 0.003 247 / 0.72);
- border: 1px solid oklch(0.9 0.004 247 / 0.95);
- border-radius: calc(var(--radius) + 0.5rem);
- backdrop-filter: blur(14px);
- }
- .dark .glass-subtle {
- background: oklch(0.25 0.012 265 / 0.42);
- border-color: oklch(1 0 0 / 0.08);
- }
- /* Light: subtle card with border; Dark: glass panel */
- .glass {
- background: oklch(1 0 0 / 0.7);
- border: 1px solid oklch(0.87 0.005 247);
- border-radius: var(--radius);
- }
- .dark .glass {
- background: oklch(1 0 0 / 0.04);
- border-color: oklch(1 0 0 / 0.07);
- backdrop-filter: blur(12px);
- }
- .glass-card {
- background: linear-gradient(
- 180deg,
- oklch(1 0 0 / 0.72),
- oklch(0.99 0.002 247 / 0.94)
- );
- border: 1px solid oklch(0.9 0.005 247 / 0.95);
- border-radius: calc(var(--radius) + 0.25rem);
- box-shadow: 0 8px 20px oklch(0.3 0.01 260 / 0.06);
- backdrop-filter: blur(16px) saturate(1.06);
- }
- .dark .glass-card {
- background: linear-gradient(
- 180deg,
- oklch(0.24 0.015 265 / 0.52),
- oklch(0.18 0.012 265 / 0.72)
- );
- border-color: oklch(1 0 0 / 0.08);
- box-shadow: 0 14px 32px oklch(0 0 0 / 0.26);
- }
- .glass-strong {
- background: oklch(0.995 0.001 247 / 0.97);
- border: 1px solid oklch(0.88 0.006 247);
- border-radius: var(--radius);
- box-shadow: 0 2px 8px oklch(0.3 0.01 260 / 0.08);
- }
- .dark .glass-strong {
- backdrop-filter: blur(20px) saturate(1.2);
- background: oklch(1 0 0 / 0.07);
- border-color: oklch(1 0 0 / 0.1);
- box-shadow: 0 4px 20px oklch(0 0 0 / 0.3);
- }
}
@utility scrollbar-none {
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 7728a8a..05b7e3c 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -16,8 +16,8 @@ const geistMono = Geist_Mono({
});
export const metadata: Metadata = {
- title: "Local iCal",
- description: "Local iCal editor for calendar events",
+ title: "Local Calendar",
+ description: "Event timeline console with AI capture",
creator: "Dmytro Stanchiev",
};
@@ -43,7 +43,8 @@ export default function RootLayout({
closeButton
richColors
toastOptions={{
- className: "glass-strong",
+ className:
+ "rounded-[10px] bg-card text-card-foreground shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_12px_40px_rgba(0,0,0,0.12)]",
}}
/>
diff --git a/src/app/manifest.ts b/src/app/manifest.ts
index a4d95bf..cf8de0d 100644
--- a/src/app/manifest.ts
+++ b/src/app/manifest.ts
@@ -2,9 +2,9 @@ import type { MetadataRoute } from "next";
export default function manifest(): MetadataRoute.Manifest {
return {
- name: "local-ical PWA",
- short_name: "local-ical",
- description: "Local iCal editor with AI features",
+ name: "Local Calendar",
+ short_name: "local-cal",
+ description: "Event timeline console with AI capture",
start_url: "/",
display: "standalone",
background_color: "#ffffff",
diff --git a/src/components/drag-drop-container.tsx b/src/components/drag-drop-container.tsx
index db1d2da..d8397a8 100644
--- a/src/components/drag-drop-container.tsx
+++ b/src/components/drag-drop-container.tsx
@@ -70,7 +70,7 @@ export const DragDropContainer = ({
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.15 }}
- className="absolute inset-0 z-40 rounded-xl border-2 border-dashed border-primary/50 bg-primary/5 backdrop-blur-sm flex items-center justify-center"
+ className="absolute inset-0 z-40 flex items-center justify-center rounded-[10px] border-2 border-dashed border-primary/40 bg-background/92"
>
diff --git a/src/components/location-autocomplete.tsx b/src/components/location-autocomplete.tsx
index ce0bf04..d2b07e3 100644
--- a/src/components/location-autocomplete.tsx
+++ b/src/components/location-autocomplete.tsx
@@ -189,7 +189,7 @@ const ServerLocationInput = ({
value={value}
/>
{showSuggestions ? (
-
+
{suggestions.map((suggestion) => {
const suggestionKey =
@@ -198,7 +198,7 @@ const ServerLocationInput = ({
return (
-
+
-
Direct create preference
@@ -161,7 +161,7 @@ export function SettingsPanel({
: `${valuePrefix}: off`}
-
+
-
AI integrations
diff --git a/tests/legacy-design-migration.test.ts b/tests/legacy-design-migration.test.ts
new file mode 100644
index 0000000..f64372b
--- /dev/null
+++ b/tests/legacy-design-migration.test.ts
@@ -0,0 +1,68 @@
+import { describe, expect, test } from "bun:test";
+import { readFileSync } from "node:fs";
+
+const read = (path: string) => readFileSync(path, "utf8");
+
+describe("legacy design migration", () => {
+ test("global styles remove obsolete glass helpers once console surfaces take over", () => {
+ const source = read("src/app/globals.css");
+
+ expect(source).not.toContain(".glass-surface");
+ expect(source).not.toContain(".glass-panel");
+ expect(source).not.toContain(".glass-subtle");
+ expect(source).not.toContain(".glass-card");
+ expect(source).not.toContain(".glass-strong");
+ });
+
+ test("layout metadata and toast surface use redesign language", () => {
+ const layout = read("src/app/layout.tsx");
+ const manifest = read("src/app/manifest.ts");
+
+ expect(layout).not.toContain("Local iCal");
+ expect(layout).not.toContain("editor for calendar events");
+ expect(layout).not.toContain("glass-strong");
+ expect(manifest).not.toContain("local-ical");
+ expect(manifest).not.toContain("Local iCal editor");
+ });
+
+ test("auth screens use console surfaces instead of old glass cards", () => {
+ const signIn = read("src/app/auth/signin/sign-in-form.tsx");
+ const signOut = read("src/app/auth/signout/page.tsx");
+ const errorPage = read("src/app/auth/error/page.tsx");
+
+ expect(signIn).not.toContain("glass-strong");
+ expect(signOut).not.toContain("glass-strong");
+ expect(errorPage).not.toContain("glass-strong");
+ expect(signIn).not.toContain("rounded-2xl");
+ expect(signOut).not.toContain("rounded-2xl");
+ expect(errorPage).not.toContain("rounded-2xl");
+ });
+
+ test("auth and app copy use timeline-first language", () => {
+ const signIn = read("src/app/auth/signin/sign-in-form.tsx");
+ const errorPage = read("src/app/auth/error/page.tsx");
+ const settings = read("src/components/settings-panel.tsx");
+
+ expect(signIn).not.toContain("Local iCal");
+ expect(signIn).not.toContain("event creation");
+ expect(errorPage).not.toContain("Homepage");
+ expect(settings).not.toContain("review modal");
+ });
+
+ test("overlay surfaces use console framing instead of blur-heavy legacy treatments", () => {
+ const autocomplete = read("src/components/location-autocomplete.tsx");
+ const dragDrop = read("src/components/drag-drop-container.tsx");
+
+ expect(autocomplete).not.toContain("backdrop-blur-sm");
+ expect(autocomplete).toContain("rounded-[10px]");
+ expect(dragDrop).not.toContain("rounded-xl");
+ expect(dragDrop).not.toContain("backdrop-blur-sm");
+ expect(dragDrop).toContain("rounded-[10px]");
+ });
+
+ test("settings internal rows drop the old bordered mini-card treatment", () => {
+ const settings = read("src/components/settings-panel.tsx");
+
+ expect(settings).not.toContain("rounded-xl border border-border/60 bg-muted/35");
+ });
+});