mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-10-04 02:33:47 +10:00
"Everything you've done, on one page." A single resume page is assembled, written, restyled, checked, tailored and shared as the visitor scrolls, followed by live community numbers, languages, a support receipt, a closing call to action and the footer. It replaces the previous homepage and its playgrounds. Motion: a small scroll engine (features/homepage/scroll.ts) writes each section's progress as --p on every animation frame, and the scenes derive their motion from it with CSS calc(). React only re-renders on coarse steps held in a zustand store. Reduced motion collapses every pinned scene to one screen at its end state and stops all ambient motion. Server-rendered copy: the web build now prerenders the homepage once per locale (Vite app builder, features/homepage/prerender.tsx) into apps/web/dist-prerender, which the server sends for "/" by `?locale=`, then the saved locale cookie. main.tsx waits for the route to load before React replaces the prerendered page, so it never flashes a loading screen. dist-prerender is added to turbo outputs, the Docker image and the Vercel function files. SEO: localized title and description, a canonical per locale, hreflang alternates for every locale over `/?locale=` addresses (the app now reads that parameter), and SoftwareApplication JSON-LD. The FAQ structured data is dropped because the page shows no FAQ. Also: self-hosted Anybody and Martian Mono (landing only) and Newsreader italic, graphite doodles as WebP, new Material Symbols in the icon subset, the pull-cord theme switch on the app's theme cookie, and new catalog strings extracted for translation.
79 lines
1.6 KiB
JSON
79 lines
1.6 KiB
JSON
{
|
|
"$schema": "https://unpkg.com/knip@6/schema.json",
|
|
"tags": ["-lintignore"],
|
|
"workspaces": {
|
|
".": {
|
|
"entry": ["api/index.mjs"]
|
|
},
|
|
"apps/web": {
|
|
"entry": ["lingui.config.ts", "vite.config.ts", "vitest.config.ts", "src/features/homepage/prerender.tsx"],
|
|
"vite": {
|
|
"config": []
|
|
},
|
|
"vitest": {
|
|
"config": []
|
|
}
|
|
},
|
|
"apps/server": {
|
|
"ignoreDependencies": [
|
|
"@ai-sdk/anthropic",
|
|
"@ai-sdk/cerebras",
|
|
"@ai-sdk/cohere",
|
|
"@ai-sdk/deepseek",
|
|
"@ai-sdk/fireworks",
|
|
"@ai-sdk/google",
|
|
"@ai-sdk/groq",
|
|
"@ai-sdk/mistral",
|
|
"@ai-sdk/openai",
|
|
"@ai-sdk/openai-compatible",
|
|
"@ai-sdk/perplexity",
|
|
"@ai-sdk/togetherai",
|
|
"@ai-sdk/xai",
|
|
"@aws-sdk/client-s3",
|
|
"@better-auth/api-key",
|
|
"@better-auth/drizzle-adapter",
|
|
"@better-auth/infra",
|
|
"@better-auth/passkey",
|
|
"@bramus/specificity",
|
|
"@formepdf/core",
|
|
"@formepdf/react",
|
|
"@orpc/experimental-ratelimit",
|
|
"@sindresorhus/slugify",
|
|
"@t3-oss/env-core",
|
|
"@uiw/color-convert",
|
|
"@vercel/blob",
|
|
"ai",
|
|
"bcrypt",
|
|
"cjk-regex",
|
|
"css-tree",
|
|
"drizzle-zod",
|
|
"fast-json-patch",
|
|
"fast-png",
|
|
"fflate",
|
|
"ioredis",
|
|
"jose",
|
|
"jsonrepair",
|
|
"node-html-parser",
|
|
"nodemailer",
|
|
"ollama-ai-provider-v2",
|
|
"react-email",
|
|
"react-reconciler",
|
|
"resumable-stream",
|
|
"sanitize-html",
|
|
"sharp",
|
|
"tokenx",
|
|
"ts-pattern",
|
|
"unique-names-generator",
|
|
"uuid"
|
|
]
|
|
},
|
|
"tooling": {
|
|
"entry": ["issue-labels.mjs"]
|
|
},
|
|
"packages/api": {
|
|
"ignoreDependencies": ["ioredis"]
|
|
}
|
|
},
|
|
"ignoreDependencies": ["@reactive-resume/config"]
|
|
}
|