Files
luna-portfolio/README.md

942 B

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 /new returns unread messages
  • POST /seen marks one or more messages as seen
  • POST /delete deletes one or more messages

Example bodies:

{ "id": "message_..." }

or

{ "ids": ["message_1", "message_2"] }

Run backend tests

python3 shsf/contact-api/test_main.py