A modern note-taking application built with FastAPI, SQLAlchemy, and SQLite.
- User Authentication: Register, login, logout with JWT tokens
- Notes CRUD: Create, read, update, delete notes
- Search: Case-insensitive full-text search
- Pin Notes: Keep important notes at the top
- Archive: Hide notes without deleting
- Colors: 12 color options for visual organization
- Responsive UI: Clean, modern interface
- Backend: FastAPI, SQLAlchemy, Pydantic
- Database: SQLite
- Auth: JWT (access + refresh tokens), bcrypt
- Frontend: Jinja2 templates, vanilla JavaScript
- Testing: pytest, httpx
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activatepip install -r requirements.txtuvicorn app.main:app --reloadVisit http://127.0.0.1:8000
pytest -v| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/register | Create account |
| POST | /auth/login | Login, get tokens |
| POST | /auth/logout | Invalidate token |
| POST | /auth/refresh | Refresh access token |
| GET | /auth/me | Get current user |
| Method | Endpoint | Description |
|---|---|---|
| POST | /notes | Create note |
| GET | /notes | List notes (with search, filters) |
| GET | /notes/{id} | Get single note |
| PUT | /notes/{id} | Update note |
| DELETE | /notes/{id} | Delete note |
| POST | /notes/{id}/pin | Toggle pin |
| POST | /notes/{id}/archive | Archive note |
| POST | /notes/{id}/unarchive | Restore note |
Stickies/
├── app/
│ ├── core/ # Config, database, security
│ ├── models/ # SQLAlchemy models
│ ├── routers/ # API endpoints
│ ├── schemas/ # Pydantic schemas
│ ├── static/ # CSS, JavaScript
│ ├── templates/ # Jinja2 HTML templates
│ ├── tests/ # pytest tests
│ └── main.py # FastAPI application
├── docs/ # Tutorial documentation
├── requirements.txt
└── README.md
MIT