---
# System prepended metadata

title: SoundCheck

---

# SoundCheck 
Get your sounds checked 

---

## Omschrijving
Platform voor muzieklabel (in ons geval '**Ethereal**') om nieuw talent te ontdekken en makkelijk muziek te checken van artiesten, communiceren en artiesten beheren.

## Project vereisten
- Guest kan de Artists & Tracks (releases) van een label bekijken.
- Artist kan account aanmaken op de app.
- Artist is standaard member van het label.
- Artist kan label Artist worden van het label.
- Artist kan tracks pitchen (uploaden) naar het label.
    - Artist kan tags/beschrijving/foto toevoegen bij de track
- Een label A&R kan 1 of meerdere tracks van artists reviewen
    - Actions
        - Goedgekeurd
        - Afgekeurd
    - Feedback
        - Comments
- Goedgekeurde tracks
    - De label A&R neemt zo snel mogelijk contact met je op
- De label A&R kan comments plaatsen bij de track op een bepaald tijdstip.
- De admin kan leden een bepaalde rank geven (bijvoorbeeld als een track gesigned wordt)
- Wanneer een track goedgekeurd is, kan een contract (pdf format) gegenereerd worden.
    - Royalty split ingeven bij track met meerdere artists
 
**Nice to haves:**
- AI Lyrics generator
- AI Tags
- Label betaald de
- Factuur overview
- Bij alle acties worden mails verstuurd
- Tracks **on hold** plaatsen met een versie beheer systeem.
- Chat tussen artist en label A&R / label manager.
- Albums toevoegen op de site en laten signen.
- Sublabels toevoegen
- Pitch voor opkomende tracks adhv press-kit
    - bio
    - foto
    - track desc
    - countries
- Calendar view voor releases
- Landing page announcements
- Staff page
- App grootschaliger maken door
    - Label A&R per verschillende genres
    - Signed artists & new artists scheiden bij demos voor A&R

**Roles:**
- (1) Artist
- (2) Label Artist
- (3) Label A&R
    - Keurt muziek
    - Kan member label artist maken
- (4) Label Manager (big boss) => Kan roles uitdelen 

# Technische vereisten


**Frontend**
framework: svelte
styling: tailwind
animations: lottie (ae) & self defined
bundler: vite

**Backend technology**
framework: NestJS
security: Firebase
database: MySql in Mariadb
api: rest & graphQL

**Tools**
git: github
scrum: github project boards
machine: teleport
docker

# Werkverdeling
- frontend: Maxime
- backend: Niels

# App structure

- Landing page label `/` | `/index` | `/home`
- Releases `/releases` | `/tracks` | `/track`
    - New / spotlight / all
- Artists `/artists`
    - New / spotlight / all
- Info `/info`
- Contact `/contact`
- Portal 
    - Login `/login`
    - Register `/register` | `/signup`

- Artist portal
    - Home `/artist/` | `/artist/index` | `/artist/home`
        - Notifications overview (big)
    - Tracks
        - All tracks (my demos archive) `/artist/tracks`
        - Submit demo `/artist/demo/submit`
        - Status demo `/artist/demo/` & `/artist/demo/:trackId`
            - Add comments 
            - Manage contract
            - Edit track `/artist/demo/:trackId-edit`
    - Royalties `/artist/royalties`
        - All tracks
        - Track royalties (First quarter, ..) `/artist/royalties/:trackId`
    - Notifications 
        - Demo has been approved / denied
        - New comment on track
        - Contract has been uploaded
        - Royalties are available
        - Royalties have been paid
- Staff portal
    - Home `/staff/` | `/staff/index` | `/staff/home`
        - Notifications overview (big)
    - Tracks 
        - All tracks (archive) `/staff/tracks`
        - All demos `/staff/demo(s)`
        - Status demo `/staff/demo` & `/staff/demo/:trackId`
            - Approve / Deny tracks
            - Edit track `/staff/demo/:trackId-edit`
            - Add comments
            - Manage contract
    - Users
        - All users `/staff/user(s)`
        - Edit user / +role `/staff/user/:userId`
    - Royalties `/staff/royalties`
        - All tracks
        - Track royalties (First quarter, ..) `/staff/royalties/:trackId`
    - Notifications
        - New comment on track
        - Contract has been uploaded
        - Invoice has been uploaded

# Passwords

- Admin (Label Owner)
    - username: docent@howest.be
    - password: P@ssw0rd
- Label A&R
    - username: labelar@soundcheck.be
    - password: L@bLAnR1
- Label Artist
    - username: artist.label@soundcheck.be
    - password: @rtistLBL1
- Artist 
    - username: artist@soundcheck.be
    - password: @rtistSC1

# Milestones

## 10 okt - Opzetten project structuur in Svelte & NestJS
- [x] Svetle init
- [x] Typscript added
- [x] Tailwind added
- [x] API

## 17 okt - ERD & Database zijn aangemaakt met API
- [x] ERD
- [x] DB
- [x] NestJs API
- [x] DB wordt geseed met test data

## 17 okt - Schema verschillende pagina's/routes in SPA
In het design document zijn er verschillende wireframes beschikbaar van alle routes die voorzien zullen worden in de SPA.

## 17 okt - Praktische elementen beschikbaar in dossier
- [x] Paswoorden om te testen
- [x] Geplande werkverdeling in jouw team 
- [x] Geplande milestones (Noot: de milestones zijn kritische targets, die je wenst te behalen. Een niet behaalde milestone resulteert in herplanning en aanpassing van het dossier). 

## 24 okt - Kunnen registreren & inloggen in de SPA met alle voorziene roles
- [x] Artist
- [x] Label Artist
- [x] Label A&R (Keurt muziek & Kan member label artist maken)
- [x] Label Manager (big boss -> Kan roles uitdelen)

## 04 nov - Elke role krijgt een overzicht/home pagina te zien na het inloggen

- [x] Artist
- [x] Label Artist
- [x] Label A&R (Keurt muziek & Kan member label artist maken)
- [x] Label Manager (big boss -> Kan roles uitdelen)

## 14 nov - Artisten kunnen tracks uploaden naar het label & label kan deze beluisteren
- [x] Uploaden 
- [x] Beluisteren

## 21 nov - Label A&R kan Actions ondernemen & feedback geven
- [x] Actions
    - Goedgekeurd
    - Afgekeurd
- [x] Feedback
    - Comments

## 25 nov - Kubernetes opzetten en file storage regelen
- [x] Kubernetes deployments opzetten (db & api)
- [x] Storage in kubernetes cluster voor de file uploads
- [x] Files beschikbaarmaken via api

## 31 nov - Label & Artist kunnen geld regelingen bekijken en definiëren
- [x] Wanneer een track goedgekeurd is, kan een contract (pdf format) gegenereerd worden.
    - Royalty split ingeven bij track met meerdere artists

## 20 dec - Inleveren project

# Rapportering

## Frontend

### Moeilijkheden
- Authorization met firebase in SvelteKit
- Tracks inladen met wavesurfer.js
    - Preview
    - Uit backend
- Validation aanpak

### Succes
- Component refactoring
- Transitions tussen paginas
- Volledigheid & grootte van de app + toekomstplannen  

## Backend

### Moeilijkheden
- Opzetten Guards voor role verifaction
- Roles gaan checken in relationele data, wie mag een niet gereleasde track zien?
- Goede error handling structuur uitwerken voor GraphQL
- Opzetten Kubernetes
- NestJS structuur snappen en juist implementeren.
- Onderzoeken wie wat mag terug krijgen en hoe dit met juist Type's doen in GraphQL.
- Performant relaties gaan ophalen in GraphQl met NestJS & TypeORM. => Oplossing nog niet 100% geïmplementeerd

### Succes
- Opzetten Kubernetes
- File uploads
- Contract generation
- Sterke authorizatie en authenticatie op zowel token als rollen


## Backend

# Todo's frontend

Niels

- [x] Dockerize en github actions (feedback rond env files vragen)
- [x] Forget password frontend
- [x] Favicons
- [x] Responsive portal
- [x] Error logging standaardiseren (!Maxime niet aan werken tegelijkertijd)

Maxime

- [x] Testing frontend unit en e2e
- [x] EsLint for frontend
- [x] Dependencies checken voor build optimization

# App testing

## Artist

- [x] Registreren
- [x] Submit a track => maxime nodig error handling preview track
- [x] Edit a track => preview part ook beschikbaar om te updaten?

## Staff

- [x] Review a track (accept/deny)
- [x] Give feedback on a track
- [x] Generate a contract
- [x] Edit a user profile

## Algemeen

- [x] Bekijken releases
- [x] Bekijken artiesten
- [x] Forgot password
- [x] Remember me


# Todo's

## Frontend

### Gebruik framework ✅
### Functionaliteiten ✅
### Design & styling 👀
- [ ] Fade on scroll effect landingpage
- [x] Iets specialere home pagina?
### Testing (unit, integration) ✅
### PWA - caching aanpak 👀
- [x] Zijn er nog probelemen met de service worker?
- [ ] Hoe werkt serviceworker nu exact, bekijken voor presentatie
### Multilanguage / internationalisation ✅
### Error logging, code climate 👀
- [ ] Er is geen externe tool om onze logs te gaan bij houden.
### Vite / Webpack optimisations 👀
Hoe zorg je dat een build optimised is? Wat zou je nog kunnen verbeteren? Weet je wat er 
allemaal in je build zit? Kan je dat weergeven, etc.
- [ ] dev & prod dependencies nog eens bekijken
### Eigen inbreng ✅
- wavesurfer.js
- tests runnen in pipeline
- docker image pushed naar github bij push op main via github actions
- draait in k8
- SvelteKit framework
- muziek / image uploads en afspelen muziek
- deployment op vercel & k8 via verschillende adapters
### DevOps ✅

## Backend

- [x] Cross Site Forgery, Cross Site Scripting !!

### Docker 👀
- [x] pushen naar github container registry
### Kubernetes ✅
### Helm 👀
- [ ] De Kubernetes applicatie wordt gedeployed via een Helm chart.
### Database ✅
### Error Logging, Clean code ✅
### CI/CD 👀
- [x] Kubernetes deployment via GitHub Actions
### Database ✅
### Authenticatie ✅
### Extra services ✅
### Eigen inbreng ✅
- pdf generation
- 4 role types with Guards & roles in acces token
- NestJS framework
- Unit tests
- Versioning
- Caching on tracks rest
- Files storen en ophalen via rest & encoded strings, in k8