57 lines
1.8 KiB
Markdown
57 lines
1.8 KiB
Markdown
# ✨ Spark Slop
|
|
|
|
A small, fast web app for capturing **project ideas** and growing them with
|
|
**timestamped notes** — like a comment thread for each idea.
|
|
|
|
Built with **Bun**, **TypeScript**, and **SQLite** (`bun:sqlite`). No external
|
|
runtime dependencies — the whole backend is the Bun standard library.
|
|
|
|
## Stack
|
|
|
|
- **Bun.serve** — HTTP server + static file serving
|
|
- **bun:sqlite** — embedded database (single `spark_slop.db` file, WAL mode)
|
|
- **Vanilla TS/JS frontend** — no build step, no framework
|
|
- A landing page (`/`) and the app (`/app`)
|
|
|
|
## Run it
|
|
|
|
```bash
|
|
bun run dev # auto-reload on file changes
|
|
# or
|
|
bun run start # plain run
|
|
```
|
|
|
|
Then open **http://localhost:3000**. Set `PORT` to change the port:
|
|
|
|
```bash
|
|
PORT=8080 bun run start
|
|
```
|
|
|
|
The SQLite database file (`spark_slop.db`) is created automatically on first run.
|
|
|
|
## Project layout
|
|
|
|
```
|
|
src/
|
|
db.ts # SQLite schema + typed query functions
|
|
server.ts # Bun.serve: JSON API + static files
|
|
public/
|
|
index.html # landing page
|
|
app.html # the app (idea list + notes)
|
|
app.js # frontend logic (API client, rendering)
|
|
styles.css # modern dark UI
|
|
```
|
|
|
|
## API
|
|
|
|
| Method | Path | Description |
|
|
| ------ | ------------------------- | -------------------------- |
|
|
| GET | `/api/ideas` | List ideas (with note counts) |
|
|
| POST | `/api/ideas` | Create an idea `{title, description}` |
|
|
| GET | `/api/ideas/:id` | Get one idea |
|
|
| PUT | `/api/ideas/:id` | Update an idea |
|
|
| DELETE | `/api/ideas/:id` | Delete an idea (cascades notes) |
|
|
| GET | `/api/ideas/:id/notes` | List notes for an idea |
|
|
| POST | `/api/ideas/:id/notes` | Add a note `{body}` |
|
|
| DELETE | `/api/notes/:id` | Delete a note |
|