{card.owner.displayName}
-- {card.owner.role || 'Developer'}{card.owner.company ? ` @ ${card.owner.company}` : ''} -
- {#if card.owner.pronouns} -{card.owner.pronouns}
- {/if} -diff --git a/apps/web/.gitignore b/apps/web/.gitignore deleted file mode 100644 index 3b462cb0..00000000 --- a/apps/web/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -node_modules - -# Output -.output -.vercel -.netlify -.wrangler -/.svelte-kit -/build - -# OS -.DS_Store -Thumbs.db - -# Env -.env -.env.* -!.env.example -!.env.test - -# Vite -vite.config.js.timestamp-* -vite.config.ts.timestamp-* diff --git a/apps/web/.npmrc b/apps/web/.npmrc deleted file mode 100644 index b6f27f13..00000000 --- a/apps/web/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/apps/web/README.md b/apps/web/README.md deleted file mode 100644 index a6b2694e..00000000 --- a/apps/web/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# DevCard Web - -The web backup frontend for DevCard, built with [SvelteKit](https://kit.svelte.dev/). - -This app provides: -- The landing page for DevCard -- Public, browser-accessible profiles with view analytics -- Cross-platform analytics source tracking - -## Developing - -```bash -pnpm install -pnpm dev -``` - -## Building - -To create a production version of your app: - -```bash -pnpm build -``` diff --git a/apps/web/package.json b/apps/web/package.json deleted file mode 100644 index 3601215b..00000000 --- a/apps/web/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@devcard/web", - "private": true, - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite dev --host", - "build": "vite build", - "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" - }, - "dependencies": { - "@devcard/shared": "workspace:*" - }, - "devDependencies": { - "@sveltejs/adapter-auto": "^7.0.0", - "@sveltejs/kit": "^2.50.2", - "@sveltejs/vite-plugin-svelte": "^6.2.4", - "svelte": "^5.51.0", - "svelte-check": "^4.4.2", - "typescript": "^5.9.3", - "vite": "^7.3.1" - } -} diff --git a/apps/web/src/app.css b/apps/web/src/app.css deleted file mode 100644 index 0f9e8bb0..00000000 --- a/apps/web/src/app.css +++ /dev/null @@ -1,206 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Outfit:wght@500;600;700;800;900&display=swap'); - -:root { - /* Primary Palette */ - --primary: #6366f1; - --primary-glow: rgba(99, 102, 241, 0.4); - --accent: #a855f7; - --accent-glow: rgba(168, 85, 247, 0.35); - - /* Backgrounds */ - --bg-primary: #ffffff; - --bg-secondary: #f8fafc; - --bg-page: #eef2ff; - --bg-glass: rgba(255, 255, 255, 0.38); - --bg-card: #ffffff; - - /* Text */ - --text-primary: #0f172a; - --text-secondary: #475569; - --text-muted: #64748b; - - /* Effects */ - --border: rgba(226, 232, 240, 0.9); - --border-glass: rgba(99, 102, 241, 0.25); - --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --shadow-md: 0 6px 18px -8px rgb(0 0 0 / 0.12), 0 4px 14px -12px rgb(0 0 0 / 0.08); - --shadow-lg: 0 12px 24px -10px rgb(0 0 0 / 0.15), 0 6px 12px -14px rgb(0 0 0 / 0.08); - --shadow-nav: 0 8px 32px -8px rgba(99, 102, 241, 0.18), 0 2px 8px 0 rgba(99, 102, 241, 0.08); - - --radius: 14px; - --radius-lg: 26px; - --radius-xl: 34px; - - --theme-transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); -} - -html.dark { - --bg-primary: #020617; - --bg-secondary: #0f172a; - --bg-page: #050b18; - --bg-glass: rgba(15, 23, 42, 0.72); - --bg-card: #0f172a; - - --text-primary: #f8fafc; - --text-secondary: #cbd5e1; - --text-muted: #64748b; - - --border: rgba(30, 41, 59, 0.85); - --border-glass: rgba(255, 255, 255, 0.12); - --shadow-nav: 0 4px 24px -6px rgba(0, 0, 0, 0.45), 0 1px 4px 0 rgba(0, 0, 0, 0.25); -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - font-family: 'Inter', sans-serif; - background: - radial-gradient(ellipse at 60% -10%, rgba(99, 102, 241, 0.28) 0%, transparent 55%), - radial-gradient(ellipse at -10% 80%, rgba(168, 85, 247, 0.18) 0%, transparent 45%), - radial-gradient(ellipse at 100% 60%, rgba(99, 102, 241, 0.12) 0%, transparent 40%), - var(--bg-page); - color: var(--text-primary); - transition: var(--theme-transition); - -webkit-font-smoothing: antialiased; - min-height: 100vh; - overflow-x: hidden; -} - -h1, h2, h3, h4, h5, h6 { - font-family: 'Outfit', sans-serif; - font-weight: 700; - line-height: 1.15; -} - -a { - color: inherit; - text-decoration: none; - transition: var(--theme-transition); -} - -button, -.btn-primary, -.btn-secondary { - transition: transform 0.24s ease, box-shadow 0.24s ease, background-color 0.24s ease, border-color 0.24s ease, color 0.24s ease; -} - -button { - font: inherit; -} - -.glass { - background: var(--bg-glass); - backdrop-filter: blur(18px); - -webkit-backdrop-filter: blur(18px); - border: 1px solid var(--border-glass); - box-shadow: var(--shadow-nav); -} - -.gradient-text { - background: linear-gradient(135deg, var(--primary), var(--accent)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -.btn-primary { - display: inline-flex; - align-items: center; - justify-content: center; - background: linear-gradient(135deg, var(--primary), var(--accent)); - color: white; - padding: 0.95rem 1.85rem; - border-radius: calc(var(--radius) * 1.2); - font-weight: 700; - box-shadow: 0 18px 35px -18px rgba(99, 102, 241, 0.9); - border: none; - cursor: pointer; -} - -.btn-primary:hover { - transform: translateY(-2px); - box-shadow: 0 22px 40px -16px rgba(99, 102, 241, 0.9); -} - -.btn-primary:focus-visible { - outline: 3px solid rgba(99, 102, 241, 0.35); - outline-offset: 3px; -} - -.btn-secondary { - display: inline-flex; - align-items: center; - justify-content: center; - padding: 0.85rem 1.75rem; - border-radius: calc(var(--radius) * 1.2); - font-weight: 700; - border: 1px solid rgba(255, 255, 255, 0.14); - background: rgba(255, 255, 255, 0.08); - color: var(--text-primary); - cursor: pointer; -} - -.btn-secondary:hover { - background: rgba(255, 255, 255, 0.14); - border-color: rgba(99, 102, 241, 0.45); -} - -.btn-secondary:focus-visible { - outline: 3px solid rgba(99, 102, 241, 0.18); - outline-offset: 3px; -} - -/* ---------- Custom themed scrollbar (issue #151) ---------- */ - -/* Firefox */ -html { - scrollbar-width: thin; - scrollbar-color: var(--primary) var(--bg-secondary); -} - -/* WebKit (Chromium, Safari, Edge) */ -::-webkit-scrollbar { - width: 10px; - height: 10px; -} - -::-webkit-scrollbar-track { - background: var(--bg-secondary); - border-radius: 999px; -} - -::-webkit-scrollbar-thumb { - background: linear-gradient(135deg, var(--primary), var(--accent)); - border-radius: 999px; - border: 2px solid var(--bg-secondary); - background-clip: padding-box; - transition: background 0.2s ease, box-shadow 0.2s ease; -} - -::-webkit-scrollbar-thumb:hover { - background: linear-gradient(135deg, var(--accent), var(--primary)); - box-shadow: 0 0 8px var(--primary-glow); -} - -::-webkit-scrollbar-corner { - background: var(--bg-secondary); -} - -@media (prefers-reduced-motion: reduce) { - * { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - scroll-behavior: auto !important; - } -} - -/* Light mode btn-secondary fix */ -:root:not(.dark) .btn-secondary { - border-color: var(--border); - background: rgba(0, 0, 0, 0.04); -} \ No newline at end of file diff --git a/apps/web/src/app.d.ts b/apps/web/src/app.d.ts deleted file mode 100644 index da08e6da..00000000 --- a/apps/web/src/app.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -// See https://svelte.dev/docs/kit/types#app.d.ts -// for information about these interfaces -declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface PageState {} - // interface Platform {} - } -} - -export {}; diff --git a/apps/web/src/app.html b/apps/web/src/app.html deleted file mode 100644 index 666257e4..00000000 --- a/apps/web/src/app.html +++ /dev/null @@ -1,16 +0,0 @@ - - -
- - - - - - - - %sveltekit.head% - - -- {card.owner.role || 'Developer'}{card.owner.company ? ` @ ${card.owner.company}` : ''} -
- {#if card.owner.pronouns} -{card.owner.pronouns}
- {/if} -{card.owner.bio}
- {/if} -{profile.bio}
- {/if} -Want a card like this?
-