Files
luna-portfolio/README.md

59 lines
942 B
Markdown

# 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
```bash
npm install
npm run dev
```
## Deploy
```bash
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:
```json
{ "id": "message_..." }
```
or
```json
{ "ids": ["message_1", "message_2"] }
```
### Run backend tests
```bash
python3 shsf/contact-api/test_main.py
```