Moon Site is a personal case study project: a modern website template built to demonstrate full-stack development skills using technologies like Next.js, FastAPI, and PostgreSQL.
It features a blog system powered by MDX and provides a starting point for custom full-stack applications. The goal is to build an open-source foundation others can learn from or fork.
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Markdown: MDX support for blogs
- API Framework: FastAPI (Python 3.8+)
- Database: PostgreSQL (via SQLAlchemy ORM)
- Package Manager: pnpm
- Dev Scripts: Custom CLI tool for generating blog posts
- Content: Blog posts live in
content/blog/*.mdx
Blog posts are written in .mdx
and stored in content/blog
. You can create posts using:
npm run new-post "My New Post Title"
Each post includes frontmatter for title, date, summary, and tags. Posts are automatically routed via Next.js dynamic routing.
moon-site/
├── frontend/ # Next.js frontend
├── backend/ # FastAPI backend
├── content/blog/ # Blog post MDX files
├── scripts/ # CLI post generator
└── docs/ # Static documentation assets
This project is a work-in-progress and not fully production-ready. Several features mentioned in earlier drafts are not implemented yet:
- No i18n or accessibility auditing
- No CI/CD setup or DevOps tooling
- No analytics or monitoring
- No authentication or security infrastructure
- Documentation folder is incomplete
node -v # >= 18.0.0
python -v # >= 3.8.0
docker -v # optional for container-based setup
pnpm -v # >= 8.0.0
git clone --recurse-submodules https://github.com/mirkotrotta/moon-site.git
cd moon-site
docker compose up -d
# Frontend
cd frontend
pnpm install
pnpm dev
# Backend
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload
MIT License. See LICENSE for details.
Contributions are welcome. Feel free to fork and open a PR.
Moon Site is created and maintained by Mirko Trotta.
Built with inspiration from open-source templates, including:
Found a bug? Have a suggestion? Just open a GitHub Issue.