feat: migrate landing page from Next.js to Astro

Replaces the heavy Next.js SSR app with Astro static site:
- Zero JS shipped for static pages (hero, community, CTA, footer)
- Server-side data fetching in Astro frontmatter (events, hackathon, testimonials)
- Only 4 React islands for interactive parts (mobile menu, roadmap voting, testimonials home, feature request)
- Google Fonts via <link> instead of next/font
- Nix build changed from Node.js systemd service to static nginx (mkStaticAppModule)
- npmDepsHash needs update (set to fake hash, CI will provide correct one)

Performance gains:
- No Node.js server process needed (was using ~10MB RAM)
- No Next.js runtime JS (~200KB+ saved)
- No framer-motion bundle (~130KB saved)
- Static HTML served directly by nginx

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
maulanasdqn
2026-04-10 22:10:52 +07:00
co-authored by Claude Opus 4.6
parent 0ade3c3e50
commit 95bf09c2fa
61 changed files with 4141 additions and 2259 deletions
+5 -41
View File
@@ -1,48 +1,12 @@
{
"extends": "../../tsconfig.base.json",
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
"jsx": "preserve",
"strict": true,
"noEmit": true,
"emitDeclarationOnly": false,
"esModuleInterop": true,
"target": "ES2022",
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"jsx": "react-jsx",
"jsxImportSource": "react",
"baseUrl": ".",
"paths": {
"@components": ["../../libs/ui/src/atoms/index.ts"],
"@utils": ["../../libs/utils/src/tailwind-merge/index.ts"],
"@schemas": ["../../libs/service/src/schemas/index.ts"],
"@/*": ["src/*"],
"@imphnen-frontend-service/service": ["../../libs/service/src/index.ts"],
"@imphnen-frontend-service/ui/atoms": ["../../libs/ui/src/atoms/index.ts"],
"@imphnen-frontend-service/ui/molecules": ["../../libs/ui/src/molecules/index.ts"],
"@imphnen-frontend-service/ui/organisms": ["../../libs/ui/src/organisms/index.ts"],
"@imphnen-frontend-service/utils": ["../../libs/utils/src/index.ts"]
"@data/*": ["src/data/*"]
}
},
"include": [
"**/*.js",
"**/*.jsx",
"**/*.ts",
"**/*.tsx",
"../../apps/landing/.next/types/**/*.ts",
"../../dist/apps/landing/.next/types/**/*.ts",
"next-env.d.ts",
".next/types/**/*.ts"
],
"exclude": ["node_modules", "jest.config.ts", "**/*.spec.ts", "**/*.test.ts"]
}
}