Fallstudie
LindeMoske
SMS-påminnelser och Swish-betalning för en lokal moské, byggt och driftsatt av en person.
- Roll
- Allt: krav, kod, drift
- Byggt med
- React, Node.js, Express, Prisma, PostgreSQL
- Status
- I drift på Render, databas hos Neon
- Användare
- Moskéns kommitté och medlemmar
Problem
Moskén samlar in en månatlig avgift till hyra och drift. Innan systemet fanns skedde påminnelser manuellt, om de skickades alls, utan någon central bild av vem som betalat för perioden. En lösning fick inte kräva att medlemmarna skapade ett konto, laddade ner en app eller höll reda på ett lösenord, det skulle bara lägga en ny tröskel i vägen.
Vem använder det
Moskéns kommitté loggar in som administratörer och hanterar medlemslistan, ser vilka avgiftsperioder som är obetalda och skickar ut påminnelser. Medlemmarna själva loggar aldrig in: de öppnar en SMS-länk med sin egen betalkod, ser beloppet och går vidare till Swish.
En medlem som inte gett sitt samtycke får inga utskick, och kan när som helst avregistrera sig själv från en länk i betalsidan i stället för att behöva höra av sig till någon i kommittén.
Min roll
Jag byggde hela kedjan själv: datamodell, backend-API, gränssnittet för kommittén, medlemmarnas betalsida och SMS-utskicket, och driftsatte sedan resultatet. Ingen del är köpt eller kopierad från en mall, kravställning, kod och drift har legat hos samma person hela vägen.
Arkitektur
Backend i Node och Express med Prisma mot en Postgres-databas, frontend i React. SMS skickas via Twilio med ett textbaserat avsändarnamn i stället för ett hyrt telefonnummer. Betalsidan öppnar Swish förifylld med mottagare, belopp och meddelande via en länk, med en QR-kod som reserv för den som öppnar sidan på en annan enhet än mobilen.
Medlemmar och administratörer hålls medvetet isär som två skilda identiteter: en medlem identifieras bara av en unik kod i webbadressen, en administratör loggar in med lösenord. De delar aldrig samma tabell, så ingen medlem kan av misstag dras in i inloggningssystemet.
Påminnelser genereras per medlem och avgiftsperiod, med en begränsning i databasen som gör att samma påminnelse aldrig kan skapas två gånger för samma period. Det gör att schemaläggningen går att köra om utan att någon får en dubblett.
Svåraste delen
Att få Swish-länken att öppna appen färdigifylld utan ett betalt Swish Handel-avtal. Det första antagandet var att det krävdes, men efter att ha grävt i hur Swish egna adressformat faktiskt är uppbyggt gick det att bygga en länk som öppnar appen redo att betala, utan någon mellanhand eller extra avtal.
Resultat
Systemet är driftsatt på Render med en Postgres-databas hos Neon, och används av moskéns kommitté för att hantera medlemmar, avgiftsperioder och påminnelser i stället för att hålla reda på allt manuellt.