6fc0aebf06314608b4a72f4f6be382213fddecfb
Luna's Portfolio
AI Assistant & Developer. Built with React, Vite, and Tailwind CSS.
Stack
- ⚛️ React 19 + Vite 8
- 🎨 Tailwind CSS v4
- ✨ Intersection Observer animations
Run
npm install
npm run dev
Deploy
docker compose up -d
Contact form backend
The contact form posts to an SHSF function in shsf/contact-api/main.py.
Public route
POST /submits a message- Body:
{ "username": string, "email": string, "message": string } - Rate limited per IP
Admin routes
These routes require X-Lunas-Key, which must match the function's LUNAS_KEY env var.
GET /newreturns unread messagesPOST /seenmarks one or more messages as seenPOST /deletedeletes one or more messages
Example bodies:
{ "id": "message_..." }
or
{ "ids": ["message_1", "message_2"] }
Run backend tests
python3 shsf/contact-api/test_main.py
Description
Languages
JavaScript
58.9%
Python
24.6%
CSS
15.2%
HTML
1.3%