Beautiful lunar phases by city — infinite scroll calendar views and a year-at-a-glance poster.
Built with Next.js 15 and astronomy-engine (client-side generation). Optional Flask backend included but not required to run the UI.
npm install
npm run devOpen http://localhost:3000.
Pick a city and theme from the dropdowns. Use the viewing time slider (daily themes) or parallactic rotation checkbox (Hourly Timeline). Calendar and Lunar Cycle scroll to load more months; Poster loads a full year with year navigation.
Full docs live in docs/:
- Overview — what the app does
- Architecture — layers and file map
- Data flow — fetch → render path
- Themes — Calendar, Lunar Cycle, Hourly Timeline, Poster
- Deployment — GitHub Pages static export
- Roadmap — features and plans
| Command | Purpose |
|---|---|
npm run dev |
Development server (Turbopack) |
npm run build |
Verify images, generate inline assets, static export → out/ |
npm run test |
Vitest (test/) |
npm run poster:md / poster:csv |
CLI poster tables |
npm run fetch:timeanddate |
Fetch reference phase dates from timeanddate.com |
npm run spot-check |
Cross-year phase spot-check against fixtures |
cd backend && pip install flask ephem flask-cors && python moon_phase_api.pySee docs/backend.md.