Official marketing site for Funput — an open-source Vietnamese input method for iOS, Android, macOS, Windows, and Linux.
Live site: funput.app
Built with Astro and Tailwind CSS 4. Static output is served via nginx in Docker.
pnpm install
pnpm dev --backgroundOpen http://localhost:4321.
| Command | Description |
|---|---|
pnpm dev |
Dev server |
pnpm build |
Production static build (dist/) |
pnpm preview |
Preview the production build |
pnpm check |
Astro + TypeScript checks |
pnpm format |
Format with Prettier |
pnpm format:check |
Check Prettier formatting |
website/
├── public/ # Static assets (icons, robots, OG image, llms.txt)
├── src/
│ ├── components/ # Home experience, shared header/footer, SEO
│ ├── content/
│ │ ├── blog/ # Blog Markdown/MDX (Content Collections)
│ │ └── privacy.md # Privacy policy (Markdown)
│ ├── content.config.ts
│ ├── layouts/ # Shared page layouts
│ ├── lib/ # Constants, platforms, SEO helpers
│ ├── pages/ # File-based routes
│ └── styles/ # Global CSS (Tailwind + design tokens)
├── .github/workflows/ # CI (format, check, build)
├── astro.config.mjs
├── Dockerfile
├── nginx.conf
└── package.json
Multi-stage image: Node 26 (build) + nginx alpine (serve dist/).
docker build -t funput-landing .
docker run --rm -p 8080:80 funput-landingThen open http://localhost:8080.
- Main repository: github.com/Funput/Funput
- Docs: docs.funput.app
- Windows (Microsoft Store): Funput on Microsoft Store
- Releases: github.com/Funput/Funput/releases
- Fork the repository and create a feature branch.
- Install dependencies with
pnpm install. - Make your changes; keep structure and copy consistent with the existing site.
- Before opening a pull request, run
pnpm format:check,pnpm check, andpnpm build. - Open a PR with a clear description of the change.
The site uses a paper, orange, and sage palette with Vietnamese typography. Shared tokens, layout utilities, and article typography live in src/styles/global.css. BaseLayout.astro supplies the same header and footer to every page.
HomeExperience.astro: landing page and interactive tone marks.ReadingLayout.astro: blog articles and the privacy policy, with a heading-based table of contents.src/pages/blog/index.astro: journal listing and empty state. Draft posts stay unpublished.
Manage the background preview with pnpm astro dev status, pnpm astro dev logs, and pnpm astro dev stop.