Projektstatus - jakobher/mindtracker GitHub Wiki

MindTracker - Projektstatus

Datum: 2025-05-28 Driftsatt på: https://mindtracker.se

Projektöversikt

MindTracker är en webbapplikation för att hjälpa med social ångest genom exponeringsövningar. Jag har byggt den med Node.js, Express, MongoDB och kör den med Docker på DigitalOcean.

Vad som är implementerat

Användarhantering

Grundläggande användarfunktioner fungerar:

  • Registrering och inloggning
  • Säker sessionshantering med bcrypt
  • Möjlighet att ta bort sitt konto
  • CSRF-skydd på formulär

Exponeringsmodul

Detta är huvudfunktionen i appen:

Exponeringsstege:

  • Skapa mallar för övningar med svårighetsgrad 1-10
  • Organisera mallarna efter svårighetsgrad (lätt, medel, svår)
  • Redigera och ta bort mallar
  • Skapa konkreta övningar från mallarna

Exponeringsövningar:

  • Planera övningar med plats, datum och förväntad ångestnivå
  • Markera övningar som genomförda
  • Registrera faktisk ångestnivå och reflektioner
  • Filtrera och sortera övningar efter status och datum
  • Redigera och ta bort övningar

Framstegsspårning

En enkel visualisering med ApexCharts som visar:

  • Genomsnittlig ångestnivå över tid
  • Jämförelse mellan förväntad och faktisk ångest
  • Grundläggande statistik över genomförda övningar

Tekniska lösningar

  • Docker-containers för app, databas och NGINX
  • HTTPS med Let's Encrypt
  • Deployment på DigitalOcean VPS
  • Publikt GitHub-repo för koddelning

Vad som inte blev gjort

Tankeutmanare-modulen

Jag planerade en modul för att logga och utmana negativa tankar, men hann inte implementera den. Tidsmässigt prioriterade jag exponeringsmodulen eftersom det är kärnfunktionen.

Lösenordsåterställning

Inte implementerat eftersom det kräver e-postintegration och inte var kritiskt för grundfunktionen.

Optimeringar som inte hinns med

  • Tailwind CSS körs via CDN vilket inte är optimalt för produktion
  • Sessions lagras i minnet istället för databas
  • Saknar vissa säkerhetsfunktioner som rate limiting

Var jag befinner mig i processen

Applikationen fungerar som tänkt för sitt syfte - att hjälpa med exponeringsövningar för social ångest.

Teststatus

Manuella testfall

Jag har gjort tre grundliga testrundor:

Testrapport 1: 15 av 16 testfall passerade. Hittade ett problem med lösenordslängd-validering som jag fixade.

Testrapport 2: 25 av 29 testfall passerade.

Testrapport 3: 34 av 34 testfall passerade

Automatiserade tester

Satte upp Jest och skrev tester för lösenordsvalidering. Inte så många tester men bra lärdom att testa detta.

Användartester

Testade med några kurskamrater som gav feedback på användarvänligheten. Hjälpte mig hitta några förbättringsområden.

Kända problem och förbättringsområden

Användarupplevelse

  • Framstegsspårningen visar missvisande "försämring" när användaren går över till svårare övningar, eftersom genomsnittet höjs av de nya utmaningarna
  • Lösning: Separata diagram per svårighetsgrad (1-4, 5-7, 8-10) för att visa progression inom varje nivå
  • Detta skulle ge en tydligare bild av både färdighetsbyggande och modbyggande

Prestanda

  • Tailwind CSS via CDN - ej optimalt för produktion.

Säkerhet

  • Grundläggande säkerhet finns men skulle kunna förbättras
  • Saknar rate limiting för inloggningsförsök

Skalbarhet

  • Sessions i minnet fungerar inte för många användare
  • MongoDB behöver indexering för större datavolymer

Driftsättning

Applikationen körs på:

  • DigitalOcean VPS med Ubuntu
  • Docker Compose för containerhantering
  • NGINX som reverse proxy
  • Let's Encrypt för HTTPS
  • Egen domän (mindtracker.se)

Reflektion

Jag är nöjd med vad jag fick gjort inom tidsramen. Exponeringsmodulen blev som jag tänkte mig och användarvänlig. Det finns självklart saker som kan förbättras men för ett kursprojekt tycker jag det blev bra.

Det mest lärorika var att sätta upp hela deployment-kedjan från utveckling till produktion. Att få HTTPS att fungera med Let's Encrypt och hantera DNS var utmanande men givande.

Hade jag haft mer tid skulle jag ha fokuserat på tankeutmanare-modulen och prestandaoptimering, men kärnfunktionen fungerar som den ska.