Musiikkitietokanta
Kattava MVP-tasoinen full-stack-verkkosovellus bändien, muusikoiden ja konserttien hallintaan.
🔗 Live Demo
📚 API dokumentaatio
Yleiskatsaus
Music Database on MVP-tasoinen tuotantovalmis verkkosovellus, joka demonstroi moderneja fullstack-kehityksen käytäntöjä API-suunnittelusta valmiin järjestelmän julkaisuun. Se tarjoaa perustoiminnallisuuden muusikoiden, bändien ja konserttien hallintaan.
Keskeiset ominaisuudet
Bändien hallinta
- Luo ja hallitse bändiprofiileja
- Seuraa bändien historiaa ja kokoonpanomuutoksia
- Järjestä bändit genren ja alkuperän mukaan
Muusikkoprofiilit
- Yksittäisten muusikoiden profiilit elämäkerrallisilla tiedoilla
- Roolien ja instrumenttien seuranta
- Muusikoiden liittäminen useisiin bändeihin
Konserttien hallinta
- Konserttien aikataulut
- Tapahtumapaikat ja sijainnit
- Yhdistä konsertit tiettyihin bändikokoonpanoihin
Suhteet
- Bändijäsenyydet rooleineen ja aikajaksoineen
- Käyttäjien suosikkibändit
- Monimutkainen relaatioiden mallinnus
Käyttökokemus
- Kaksikielinen käyttöliittymä: täysi tuki suomelle ja englannille
- Turvallinen tunnistautuminen: JWT-pohjainen autentikointi ja argon2-salaus
- Responsiivinen design: toimii desktopilla, tabletilla ja mobiilissa
TechStack
Backend
- FastAPI (Python)
- PostgreSQL + SQLAlchemy
- Alembic-migraatiot
- JWT-autentikointi ja Argon2-salaus
Frontend
- React 18 + TypeScript
- Vite
- Tailwind CSS
- i18n (react-i18next)
Infrastruktuuri
- Hetzner Cloud (Helsinki)
- Ubuntu 22.04
- Nginx reverse proxy
- HTTPS (Let's Encrypt)
Arkkitehtuuri
Frontend (React SPA)
↓
Nginx (Reverse Proxy + SSL)
↓
FastAPI Backend (:8000)
↓
PostgreSQL Database
Keskeiset arkkitehtuurivalinnat
- API-first suunnittelu
- SPA-frontend sujuvaan käyttökokemukseen
- Tilaton autentikointi (JWT)
- Eri konfiguraatiot dev/prod ympäristöille
- Normalisoitu tietokantarakenne
Tietokantarakenne
- users – käyttäjät ja autentikointi
- bands – bändit
- musicians – muusikot
- concerts – konsertit
- roles – roolit/instrumentit
- band_memberships – relaatio bändien ja muusikoiden välillä
- favourite_bands – suosikit
Kehityskäytännöt
Koodin laatu
- Type hintit Pythonissa
- TypeScript frontendissä
- Yhtenäinen koodiformatointi
Tietokannan hallinta
- Alembic-migraatiot
- Seed-data kehitykseen
- Foreign key -rajoitteet
API-dokumentaatio
- Automaattinen OpenAPI
- Swagger UI
- Esimerkkipyynnöt
Tietoturva
- Salasanojen hashays (ei plaintext)
- JWT-vanheneminen
- CORS-konfiguraatio
- HTTPS tuotannossa