Epost onboarding #79

Merged
alexanrf merged 24 commits from nettside-onboarding-mails into main 2026-09-13 08:06:26 +00:00
Owner

Etter en del frem og tilbake så tror jeg en god approach til onboarding akkurat nå er at vi oppretter en hei@datakollektivet.no epostboks som en person manuelt følger med på og hjelper nye medlemmer med å bli invitert til riktig sted.

To store hensyn tas:

  1. Vi ønsker ikke at Matrix invite URLen vår skal være fullstendig åpent på internett ettersom vi ikke har gjort et skikkelig grunnarbeid rundt moderasjon og spam.
  2. SSO er ikke klart enda og vi ønsker ikke å skape en avhengighet mellom de to. Når SSO er på plass må vi endre flyten til å inkludere registrering i Keycloak.

Datakollektivet har hatt behov for en epost i lang tid nå så jeg slår to fluer i en smekk og får det på plass sammen med nettsiden. Vi kommer til å bruke Gigahost sitt webhotell som epostleverandør. Uendelige epostkontoer for 20,- måneden. Dette er en midlertidig løsning som kun velkomstansvarlig og evt. styremedlemmer kommer til å ha tilgang til. Om noen ønsker å få på plass en skikkelig løsning så er vi åpent for det.

Det er tre flyter vi må håndtere:

  1. Mennesker som er nysgjerrige og som ønsker å få tilgang til Matrix.
  2. Medlemmer som vil/skal/har betalt og ønsker tilgang til Loomio.
  3. Medlemmer som ønsker å bidra, ønsker litt oppfølgning på hvordan, og evt. trenger tilgang til Forgejo.

Flyten som det er satt opp nå er at når en bruker fyller ut et av skjemaene så deler de epostadressen og annen informasjon. Skjemainformasjonen blir så sendt til "hei@datakollektivet.no" i et malverk som hjelper velkomstansvarlig med å svare raskt på henvendelsen. Ønsket er at det skal bare være å videresende eposten, endre til feltet, modifisere teksten litt og så sende det avgårde.

PII: Disse skjemaene her skaper PII. Altså, vi får epostaddresser som vi må behandle. Vi lagrer det ikke på serveren eller i Django og lagrer det i innboksen på Gigahost. Når vi kommer lenger i prosessen med SSO så kan vi nå ut til de vi har vært i kontakt med på epost (og har samtykket til det) og be dem registrere seg på SSO.

Todo:

  • Opprette Scaleway TEM
  • Sette opp Gigahost epost DNS oppføringer
  • Få det opp i staging
  • Migrer Scaleway til eget prosjekt.
  • Få det opp i produksjon.
Etter en del frem og tilbake så tror jeg en god approach til onboarding _akkurat nå_ er at vi oppretter en hei@datakollektivet.no epostboks som en person manuelt følger med på og hjelper nye medlemmer med å bli invitert til riktig sted. **To store hensyn tas:** 1. Vi ønsker ikke at Matrix invite URLen vår skal være fullstendig åpent på internett ettersom vi ikke har gjort et skikkelig grunnarbeid rundt moderasjon og spam. 2. SSO er ikke klart enda og vi ønsker ikke å skape en avhengighet mellom de to. Når SSO er på plass må vi endre flyten til å inkludere registrering i Keycloak. Datakollektivet har hatt behov for en epost i lang tid nå så jeg slår to fluer i en smekk og får det på plass sammen med nettsiden. Vi kommer til å bruke Gigahost sitt [webhotell](https://gigahost.no/webhotell) som epostleverandør. Uendelige epostkontoer for 20,- måneden. Dette er en midlertidig løsning som kun velkomstansvarlig og evt. styremedlemmer kommer til å ha tilgang til. Om noen ønsker å få på plass en skikkelig løsning så er vi åpent for det. **Det er tre flyter vi må håndtere:** 1. Mennesker som er nysgjerrige og som ønsker å få tilgang til Matrix. 2. Medlemmer som vil/skal/har betalt og ønsker tilgang til Loomio. 3. Medlemmer som ønsker å bidra, ønsker litt oppfølgning på hvordan, og evt. trenger tilgang til Forgejo. Flyten som det er satt opp nå er at når en bruker fyller ut et av skjemaene så deler de epostadressen og annen informasjon. Skjemainformasjonen blir så sendt til "hei@datakollektivet.no" i et malverk som hjelper velkomstansvarlig med å svare raskt på henvendelsen. Ønsket er at det skal bare være å videresende eposten, endre til feltet, modifisere teksten litt og så sende det avgårde. **PII:** Disse skjemaene her skaper PII. Altså, vi får epostaddresser som vi må behandle. Vi lagrer det ikke på serveren eller i Django og lagrer det i innboksen på Gigahost. Når vi kommer lenger i prosessen med SSO så kan vi nå ut til de vi har vært i kontakt med på epost (og har samtykket til det) og be dem registrere seg på SSO. Todo: - [x] Opprette Scaleway TEM - [x] Sette opp Gigahost epost DNS oppføringer - [x] Få det opp i staging - [x] Migrer Scaleway til eget prosjekt. - [x] Få det opp i produksjon.
@ -12,1 +7,4 @@
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'testserver']
# Flag if we're running testsuite
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'

Er ikke dette litt rart å ha i en fil for development som ikke skal brukes i test modus?

Er ikke dette litt rart å ha i en fil for development som ikke skal brukes i test modus?
Author
Owner

Det er noe litt off med "test" miljøet for øyeblikket. Egentlig er det tiltenkt noe nærmere produksjon der man kan teste building av static assets og docker pipelinen uten å deploye til en annen maskin. Kall det en form for lokal "staging". Det er ikke en stor og gjennomtenkt teststrategi satt opp her. Kun noen enkle unit tests som kan kjøres rett i python miljøet med uv run manage.py test

Kommer til å ekspandere på test suiten når det kommer flere tester. Så kan man også finne en cleanere måte å håndtere integration testing eller tester ting som kjører i docker "test miljøet" som static build pipelinen.

Det er noe litt off med "test" miljøet for øyeblikket. Egentlig er det tiltenkt noe nærmere produksjon der man kan teste building av static assets og docker pipelinen uten å deploye til en annen maskin. Kall det en form for lokal "staging". Det er ikke en stor og gjennomtenkt teststrategi satt opp her. Kun noen enkle unit tests som kan kjøres rett i python miljøet med `uv run manage.py test` Kommer til å ekspandere på test suiten når det kommer flere tester. Så kan man også finne en cleanere måte å håndtere integration testing eller tester ting som kjører i docker "test miljøet" som static build pipelinen.
alexanrf marked this conversation as resolved
@ -30,0 +36,4 @@
'BACKEND': 'django.core.mail.backends.smtp.EmailBackend',
'OPTIONS': {
'host': 'smtp.tem.scaleway.com',
'port': 587,

Jeg tror du må bruker port 2465 som vi bruker i auth.

Jeg tror du må bruker port `2465` som vi bruker i auth.

Grunnen til dette er at 2465 ikke er blokkert av Gigahost og at 2465 bruker implicit TLS som starter koblingen til serveren med TLS fra starten. 587 bruker explicit TLS som starter uten TLS og bruker en STARTTLS kommando for å oppgradere.

Grunnen til dette er at 2465 ikke er blokkert av Gigahost og at 2465 bruker implicit TLS som starter koblingen til serveren med TLS fra starten. 587 bruker explicit TLS som starter uten TLS og bruker en STARTTLS kommando for å oppgradere.
alexanrf marked this conversation as resolved
@ -30,0 +38,4 @@
'host': 'smtp.tem.scaleway.com',
'port': 587,
'use_tls': True,
'username': os.environ.get('SCALEWAY_TEM_PROJECT_ID', ''),

Er det ikke bedre å ha:os.environ['SCALEWAY_TEM_PROJECT_ID'], slik at serveren ikke starter hvis konfigurasjonen ikke er på plass?

Er det ikke bedre å ha:`os.environ['SCALEWAY_TEM_PROJECT_ID'],` slik at serveren ikke starter hvis konfigurasjonen ikke er på plass?
alexanrf marked this conversation as resolved
@ -0,0 +23,4 @@
}
),
)
newsletter = forms.BooleanField(

Hvor skal vi lagre folk som har meldt seg inn til å få nyheter?

Hvor skal vi lagre folk som har meldt seg inn til å få nyheter?
Author
Owner

Det blir lagret i Gigahost postboksen. Så kan en personal manuelt migrere de epostadressene når man har et bedre system for å håndtere epostlister. Regner med at vi ikke får så titalls mange eposter. Malen i Django må være søkbart slik at vi enkelt kan søke opp de som har akseptert det.

Det blir lagret i Gigahost postboksen. Så kan en personal manuelt migrere de epostadressene når man har et bedre system for å håndtere epostlister. Regner med at vi ikke får så titalls mange eposter. Malen i Django må være søkbart slik at vi enkelt kan søke opp de som har akseptert det.

Alle eposten blir lagret i postboksen eller bare de som ønsker nyheter blir lagret der?

Alle eposten blir lagret i postboksen eller bare de som ønsker nyheter blir lagret der?
Author
Owner

Alle eposter lagres i postboksen, både i inboxen (fra scaleway) og i utboksen når en person manuelt har svart brukeren. I praksis har brukeren bedt om å bli kontaktet på epost og jeg regner jo med at folk ikke forventer at vi tømmer inboksen og utboksen vår hver dag.

Når vi har et faktisk system for dette så kan vi manuelt gå gjennom epostene.

Men vi bør forme en retention policy på epostkontoen. For eksempel så bør alle "trivielle" eposter slettes etter ~12 måneder e.l. Det må egentlig bli en del av personvernspolicyen vår.

Alle eposter lagres i postboksen, både i inboxen (fra scaleway) og i utboksen når en person manuelt har svart brukeren. I praksis har brukeren bedt om å bli kontaktet på epost og jeg regner jo med at folk ikke forventer at vi tømmer inboksen og utboksen vår hver dag. Når vi har et faktisk system for dette så kan vi manuelt gå gjennom epostene. Men vi bør forme en retention policy på epostkontoen. For eksempel så bør alle "trivielle" eposter slettes etter ~12 måneder e.l. Det må egentlig bli en del av personvernspolicyen vår.

Om vi ikke har et system for at folk kan melde seg på en ordentlig nyhetsliste, synes jeg det er best at vi fjerner påmelding fra nettsiden frem til vi får det på plass. Ser at det fort kan bli litt kaos i en frivillig organisasjon

Om vi ikke har et system for at folk kan melde seg på en ordentlig nyhetsliste, synes jeg det er best at vi fjerner påmelding fra nettsiden frem til vi får det på plass. Ser at det fort kan bli litt kaos i en frivillig organisasjon
Author
Owner

Jeg tror namingen og teksten her er litt forvirrende. Det er egentlig ikke snakk nyhetsbrev, det er samtykke til at vi kan kontakte medlemmet i fremtiden relatert til noe annet enn det de fyller ut skjemaet for (innlogging til Matrix/betaling/etc). Slik at vi kan sende en eller tre eposter i fremtiden med "Nå har vi SSO registrer nicket ditt her", og "Nå har vi et system for nyhetsbrev, double opt-in her". En liten checkbox folk sikkert huker av for gir oss samtykke til det. Uten det bør vi ikke bruke disse epostene til noe annet enn kun en transaksjonell epost. Ikke sikkert vi bruker det engang, kommer an på om vi får 3 eller 40 folk som vil følge oss.

UXen og copy rundt dette bør egentlig ikke være et hensyn til denne branchen. Det er ikke gjennomtenkt. Formuleringer og detaljer tas på innholdsmøtet på mandag og de neste ukene 😎

Jeg tror namingen og teksten her er litt forvirrende. Det er egentlig ikke snakk nyhetsbrev, det er samtykke til at vi kan kontakte medlemmet i fremtiden relatert til noe annet enn det de fyller ut skjemaet for (innlogging til Matrix/betaling/etc). Slik at vi kan sende en eller tre eposter i fremtiden med "Nå har vi SSO registrer nicket ditt her", og "Nå har vi et system for nyhetsbrev, double opt-in her". En liten checkbox folk sikkert huker av for gir oss samtykke til det. Uten det bør vi ikke bruke disse epostene til noe annet enn kun en transaksjonell epost. Ikke sikkert vi bruker det engang, kommer an på om vi får 3 eller 40 folk som vil følge oss. UXen og copy rundt dette bør egentlig ikke være et hensyn til denne branchen. Det er ikke gjennomtenkt. Formuleringer og detaljer tas på innholdsmøtet på mandag og de neste ukene 😎
@ -0,0 +2,4 @@
from django.template.loader import render_to_string
ONBOARDING_INBOX = "hei@datakollektivet.no"
DEFAULT_FROM_EMAIL = "noreply@datakollektivet.no"

Hva er grunn til å bruke en noreply? Om noen ønsker å ta kontakt med oss bor det være mulig?

Hva er grunn til å bruke en noreply? Om noen ønsker å ta kontakt med oss bor det være mulig?
Author
Owner

Dette er eposten fra Scaleway som går til hei@datakollektivet.no fra @nettside.datakollektivet.no domenet. Den tar ikke i mot epost.

Dette er eposten fra Scaleway som går til hei@datakollektivet.no fra @nettside.datakollektivet.no domenet. Den tar ikke i mot epost.
alexanrf marked this conversation as resolved
@ -0,0 +31,4 @@
class Command(BaseCommand):
help = 'Send test onboarding notification emails for all join flows.'

Er dette for å sjekke hvordan epostene ser ut?

Er dette for å sjekke hvordan epostene ser ut?
Author
Owner

Yes. Når jeg tenker meg om kan det kanskje slettes nå som vi har tester oppe. Ikke veldig verdifullt.

Yes. Når jeg tenker meg om kan det kanskje slettes nå som vi har tester oppe. Ikke veldig verdifullt.
alexanrf marked this conversation as resolved
Author
Owner

DNS oppføringer på Gigahost er satt opp. DKIM, DMARC og SPF er delvis satt opp. Om noen er klokere på hvordan dette fungerer og vil validere det så er jeg veldig åpen. Slik jeg forstår må vi sette en annen policy enn p=none; på dmarc og bør sette opp noe monitorering med rua=mailto: om vi endrer det til noe strengere.

Oppføringene er sånn ca i banen her (ikke ment som dokumentasjon, bare til info).

Nye oppføringer:
mail A → 193.200.229.150
mail AAAA → 2a03:94e0:325d::1
smtp A → 193.200.229.150
smtp AAAA → 2a03:94e0:325d::1
@ MX → mail.datakollektivet.no
_dmarc TXT → v=DMARC1;p=none;
x._domainkey TXT → DKIM public key

Endret på oppføring:
@ TXT (SPF):
Gammel: v=spf1 -all
Ny: v=spf1 a mx ip4:193.200.229.150 ip6:2a03:94e0:325d::1 ~all

Har ikke testet sånn veldig nøye om det fungerer men jeg får mottatt og sendt epost fra hei@datakollektivet.no.
image

DNS oppføringer på Gigahost er satt opp. DKIM, DMARC og SPF er delvis satt opp. Om noen er klokere på hvordan dette fungerer og vil validere det så er jeg veldig åpen. Slik jeg forstår må vi sette en annen policy enn p=none; på dmarc og bør sette opp noe monitorering med rua=mailto: om vi endrer det til noe strengere. Oppføringene er sånn ca i banen her (ikke ment som dokumentasjon, bare til info). Nye oppføringer: mail A → 193.200.229.150 mail AAAA → 2a03:94e0:325d::1 smtp A → 193.200.229.150 smtp AAAA → 2a03:94e0:325d::1 @ MX → mail.datakollektivet.no _dmarc TXT → v=DMARC1;p=none; x._domainkey TXT → DKIM public key Endret på oppføring: @ TXT (SPF): Gammel: v=spf1 -all Ny: v=spf1 a mx ip4:193.200.229.150 ip6:2a03:94e0:325d::1 ~all Har ikke testet sånn veldig nøye om det fungerer men jeg får mottatt og sendt epost fra hei@datakollektivet.no. ![image](/attachments/5e8b6737-7298-49d0-9b3c-668e875a7897)
Author
Owner

Scaleway TEM er satt opp. DNS på gigahost er satt opp for "nettside.datakollektivet.no".

Det er verdt å nevne at det ikke var mulig å scope API access ned mot kun et domene så vi bruker nok Scaleway feil atm @gingermusketeer. Deres IAM er ganske umoden og vi bør nok bryte hvert system ut i et eget scaleway prosjekt i stedet for at vi har flere systemer inn i et prosjekt. Dette er lettere å håndtere om/når vi får Scaleway på Terraform.

Jeg renamet "test" til "staging". Test ga ikke mening. Jeg ønsker et miljø der jeg kan teste produksjonsting uten å deploye til produksjon.

For at det skal fungere så må staging ha tilgang til hemmeligheter i SOPS. Jeg landet på å bruke make og å eksportere SOPS secrets til compose miljøet på "make up". Jeg er svært skeptisk til å bygge .env filer lokalt nå om dagen nå som det lett blir slukt opp av LLMer. Åpen for andre approaches, endrer seg sikkert i fremtiden. Denne branchen er ikke tiltenkt å lage et skikkelig staging og test miljø med god logging - men å lage det jeg trenger for å teste TEM lokalt og få det til å fungere.

Scaleway TEM er satt opp. DNS på gigahost er satt opp for "nettside.datakollektivet.no". Det er verdt å nevne at det ikke var mulig å scope API access ned mot kun et domene så vi bruker nok Scaleway feil atm @gingermusketeer. Deres IAM er ganske umoden og vi bør nok bryte hvert system ut i et eget scaleway prosjekt i stedet for at vi har flere systemer inn i et prosjekt. Dette er lettere å håndtere om/når vi får Scaleway på Terraform. Jeg renamet "test" til "staging". Test ga ikke mening. Jeg ønsker et miljø der jeg kan teste produksjonsting uten å deploye til produksjon. For at det skal fungere så må staging ha tilgang til hemmeligheter i SOPS. Jeg landet på å bruke make og å eksportere SOPS secrets til compose miljøet på "make up". Jeg er svært skeptisk til å bygge .env filer lokalt nå om dagen nå som det lett blir slukt opp av LLMer. Åpen for andre approaches, endrer seg sikkert i fremtiden. Denne branchen er ikke tiltenkt å lage et skikkelig staging og test miljø med god logging - men å lage det jeg trenger for å teste TEM lokalt og få det til å fungere.
gingermusketeer left a comment

Bortsett fra bruk av prod secrets lokalt ser dette bra ut!

Bortsett fra bruk av prod secrets lokalt ser dette bra ut!
@ -24,3 +24,3 @@
# Copy the application source code into the build context so we can build static files.
ENV DJANGO_ENVIRONMENT=test
# May be a good idea to make this work with production env instead.

💯

💯
alexanrf marked this conversation as resolved
@ -0,0 +32,4 @@
VIRTUAL_HOST: nettside.localhost
VIRTUAL_PORT: 8000
SCALEWAY_TEM_PROJECT_ID: "1371d104-a4f2-4bea-8fa9-c75274064525"
SCALEWAY_TEM_SECRET_KEY: ${SCALEWAY_TEM_SECRET_KEY}

Jeg synes det er litt farlig å koble til produksjons TEM konto lokalt. Min erfaring er at det er best å holde lokale miljøer ryddig frakoblet. Med auth har jeg brukt https://github.com/dbck/docker-mailtrap i terraform-local/compose.yaml for å teste e-post lokalt.

Jeg synes det er litt farlig å koble til produksjons TEM konto lokalt. Min erfaring er at det er best å holde lokale miljøer ryddig frakoblet. Med auth har jeg brukt https://github.com/dbck/docker-mailtrap i terraform-local/compose.yaml for å teste e-post lokalt.
Author
Owner

Nå som jeg har et fungerende oppsett så er jeg ferdig med lokal testing mot scaleway. Har byttet over til å bruke mailtrap. Fiffig liten verktøy det.

Nå som jeg har et fungerende oppsett så er jeg ferdig med lokal testing mot scaleway. Har byttet over til å bruke mailtrap. Fiffig liten verktøy det.
alexanrf marked this conversation as resolved
@ -4,2 +4,4 @@
django:
secret_key: ENC[AES256_GCM,data:e4TgSURtN7VnV/qt89mmCWrKI1he1A65JH6c2QcXoT3qN77CIFjdoIxxUCl7oaYGXDabAOjHnyeVubflXaZD0vDfdg==,iv:FJoydW2p1zPzBTJ1Ehh5s+4+yakyH1md7tyf3K4AQbQ=,tag:smdhGox3mgIFAFhdA4qLow==,type:str]
scaleway:
tem_secret_key: ENC[AES256_GCM,data:8RgnKfB+2voaPFr2ea0sUJR4qUBvXL72/CtKs9yIlZNS+fUb,iv:slEPF3xFjfg31zNYxDXYPdLUZsCJz5Q+yoT0xm+MY6k=,tag:Mq0QF3EH0nPmYN3OyEGAIg==,type:str]

Kan vi bruke samme struktur (navn på nøkler osv) for konfigurasjon som vi bruker i auth? Det blir lettere å vedlikeholde ting hvis vi gjør det mer likt.

Jeg snakket med Stigo på onsdag og han mente at vi bør ha så få secrets i SOPS som mulig. Grunnen til dette er at tilgang til Age nøkkelen gir deg tilgang til alle secrets vi har i repoet. Tenker at vi kan endre dette i alle systemer etter SSO er på plass.

Kan vi bruke samme struktur (navn på nøkler osv) for konfigurasjon som vi bruker i auth? Det blir lettere å vedlikeholde ting hvis vi gjør det mer likt. Jeg snakket med Stigo på onsdag og han mente at vi bør ha så få secrets i SOPS som mulig. Grunnen til dette er at tilgang til Age nøkkelen gir deg tilgang til alle secrets vi har i repoet. Tenker at vi kan endre dette i alle systemer etter SSO er på plass.
Author
Owner

We'll get there when we get there. 👍

Følger standarden satt der. Gjør det provider-agnostisk og kaller det smtp.username/password.

We'll get there when we get there. 👍 Følger standarden satt der. Gjør det provider-agnostisk og kaller det smtp.username/password.
alexanrf marked this conversation as resolved
@ -13,0 +14,4 @@
'BACKEND': (
'django.core.mail.backends.locmem.EmailBackend'
if TESTING
else 'django.core.mail.backends.console.EmailBackend'

Har du vurdert å bruke en liggende oppsett til auth/terraform-local som har en e-post container som tar i mot e-poster lokalt? Da kan man ha samme backend i dev og prod.

Har du vurdert å bruke en liggende oppsett til auth/terraform-local som har en e-post container som tar i mot e-poster lokalt? Da kan man ha samme backend i dev og prod.
Author
Owner

Det er et veldig godt spørsmål. Håndteres i den andre kommentaren din.

Her derimot så har jeg tydeliggjort hva som foregår. Jeg har lagd en ekte test.py environment. Den trigges når man kjører manage.py test. Den bruker 'django.core.mail.backends.locmem.EmailBackend' som er en fullverdig epostserver som spinnes opp og ned for tester. Når man er bare i vanlig manage.py runserver så printes eposter bare til console med 'django.core.mail.backends.console.EmailBackend'.

Det er et veldig godt spørsmål. Håndteres i den andre kommentaren din. Her derimot så har jeg tydeliggjort hva som foregår. Jeg har lagd en ekte test.py environment. Den trigges når man kjører `manage.py test`. Den bruker 'django.core.mail.backends.locmem.EmailBackend' som er en fullverdig epostserver som spinnes opp og ned for tester. Når man er bare i vanlig `manage.py runserver` så printes eposter bare til console med 'django.core.mail.backends.console.EmailBackend'.
alexanrf marked this conversation as resolved
@ -0,0 +14,4 @@
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'class="success"')
self.assertEqual(len(mail.outbox), 1)

Bør vi sjekke hva e-posten inneholder for å sikre at det er riktig e-post som blir sendt?

Bør vi sjekke hva e-posten inneholder for å sikre at det er riktig e-post som blir sendt?
Author
Owner

Tenkte det men åpnet det heller mer opp fordi teksten skal endres på stort videre.

Tenkte det men åpnet det heller mer opp fordi teksten skal endres på stort videre.
alexanrf marked this conversation as resolved
@ -9,0 +13,4 @@
## Generelt
- [ ] Implementer Terraform/IaC for alle resourcene våre på Scaleway.
- [ ] Flytt hvert system som bruker Scaleway ut i et isolert prosjekt ikke et delt prosjekt slik at vi blir mindre avhengig av fine-grained IAM policies som Scaleway ikke har implementert spesielt godt.

Bra ide! Trenger vi å vente for Terraform å lage et prosjekt for nettsiden i Scaleway?

Bra ide! Trenger vi å vente for Terraform å lage et prosjekt for nettsiden i Scaleway?
Author
Owner

Agreed. Splitta ut i et eget "Nettside" prosjekt. Var ganske straightforward. Bør gjøres på Loomio, Kode, Auth og andre.

Agreed. Splitta ut i et eget "Nettside" prosjekt. Var ganske straightforward. Bør gjøres på Loomio, Kode, Auth og andre.
alexanrf marked this conversation as resolved
alexanrf changed title from WIP: Epost onboarding to Epost onboarding 2026-09-12 21:40:22 +00:00
Author
Owner

Takk for review @gingermusketeer. Tror jeg har tatt det meste. Men fortsatt arbeid å gjøre kodebasen skikkelig god. Bedre testing, mer organisert config, bedre logging, ++. Kommer nok mer utover når nettsiden bygges videre.

Godkjenning før mandag er fint da kan vi ta skrive innhold basert på dette i main, om du er trygg på det!

Egentlig bør vi rate limite eposter. Kommer til det før vi går live. Satt det i todo.

Takk for review @gingermusketeer. Tror jeg har tatt det meste. Men fortsatt arbeid å gjøre kodebasen skikkelig god. Bedre testing, mer organisert config, bedre logging, ++. Kommer nok mer utover når nettsiden bygges videre. Godkjenning før mandag er fint da kan vi ta skrive innhold basert på dette i main, om du er trygg på det! Egentlig bør vi rate limite eposter. Kommer til det før vi går live. Satt det i todo.
alexanrf deleted branch nettside-onboarding-mails 2026-09-13 08:06:27 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
datakollektivet/systemer!79
No description provided.