Lagen i vår kod
En uppsägningsknapp som måste fungera utan inloggning. Ett formulär som aldrig får avvisa dig. Varför rättsliga skyldigheter är arkitektur för oss, inte standardtext.

När vi gjorde Premium köpbart trodde vi att den juridiska delen var några sidor text i sidfoten. Det var fel. Vissa skyldigheter går inte alls att skriva in i en text, eftersom de bestämmer hur en funktion måste byggas.
Fyra exempel där det blev särskilt tydligt. Först, så att det är klart vad det här är: en beskrivning av vår implementering, inte juridisk rådgivning. Reglerna nedan är tysk lag, där AlphaCloud verkar.
Uppsägningsknappen som inte får ha någon inloggning
Paragraf 312k i den tyska civillagen kräver att avtal som ingåtts på nätet erbjuder ett direkt nåbart sätt att säga upp dem. Det ger krav som inte går att lägga till i efterhand med formuleringar:
- Sidan måste fungera utan inloggning
- Den måste finnas i sidfoten på varje sida
- Den behöver två steg: mata in, sedan bekräfta via en entydigt märkt knapp
- En mottagningsbekräftelse i textform måste skickas
Den sista punkten styr arkitekturen. En uppsägning är en ensidig viljeförklaring och får verkan när den tas emot. Den måste alltså alltid loggas och bekräftas, oavsett vem den kom från.
Formuläret får aldrig avvisa dig
Det var här det självklara upplägget nästan kostade oss ett misstag.
Det självklara upplägget: ta bara emot uppsägningen om server-ID och e-post matchar en aktiv prenumeration. Låter rimligt, och är fel på två sätt.
För det första skulle det stänga ute en riktig kund som skriver fel e-post eller anger en annan adress. Deras uppsägning skulle inte ha tagits emot, prenumerationen förnyas, och de har bevis för att de försökte.
För det andra, och det är den obehagligare delen: felmeddelandet i sig skulle vara ett svar. Den som får tillbaka "ingen prenumeration hittades" får veta att den här servern inte betalar. Ett Discord-server-ID är ingen hemlighet, vilken medlem som helst kan läsa ut det. Formuläret skulle bli ett verktyg för att sondera andras servrar.
Lösningen skiljer på två saker som känns som en:
| Villkor | |
|---|---|
| Mottagandet av förklaringen | villkorslöst, loggas och bekräftas alltid |
| Verkställandet av uppsägningen | bara när den angivna e-posten matchar köparen som finns registrerad |
Allt annat hamnar i en kö och granskas av en människa. Det är tillåtet eftersom paragraf 312k stycke 2 uttryckligen tillåter att man ber om uppgifter för identifiering. Det som är förbjudet är bara en inloggning framför.
Av samma skäl får det offentliga svaret bara nämna slutdatumet när identiteten är bekräftad. Annars blir bekräftelsen ett orakel igen.
Ångerrätten som medvetet har en inloggning
Precis bredvid finns en funktion som vi byggde tvärtom: ånger med proportionell återbetalning ligger bakom en inloggning.
Det är ingen motsägelse. Paragraf 312k gäller uppsägning, inte ånger, och det finns ingen skyldighet att alls erbjuda ett ångerformulär på nätet så länge den formlösa vägen är öppen. Skillnaden är följden: en uppsägning verkar framåt i tiden, en återbetalning flyttar pengar nu, och den går inte att dra tillbaka.
Tre regler som följer av det, och som vi inte mjukar upp:
Ingen obligatorisk anledning. Paragraf 355 stycke 1 ger ångerrätt uttryckligen utan att skäl behöver anges. Fältet är valfritt och måste förbli valfritt, hur frestande ett obligatoriskt fält än vore för statistiken.
Efter 14 dagar avvisas bara den automatiska vägen, aldrig förklaringen. Fristen förlängs till upp till tolv månader och fjorton dagar om kunden inte informerades korrekt. Ett generellt "för sent" kan alltså vara fel.
Skyddet mot dubbel utbetalning är pessimistiskt. Markeringen sätts innan återbetalningen körs. Om återbetalningen sedan misslyckas ligger markeringen kvar och en människa tar över. Att betala ut två gånger är det enda utfallet som inte går att reparera.
Ett Discord-DM är inget varaktigt medium
Paragraf 312f stycke 3 kräver en avtalsbekräftelse på ett varaktigt medium, och den måste återge det samtycke som gavs.
Vi skickade först ett Discord-direktmeddelande, eftersom det är kanalen där våra kunder ändå finns. Det räcker inte. Ett DM lever på en plattform vi inte kontrollerar, och det är varken lagringsbart eller oföränderligt i den mening som bestämmelsen avser.
Därför tillkom ett e-postmeddelande, och med det ett obekvämt beroende: om e-postuppgifterna inte är satta skriver utskicket bara en varning i loggen och skyldigheten uppfylls inte. En lagstadgad skyldighet som hänger på en miljövariabel är ett tillstånd värt att vara medveten om.
Ingen moms, och det måste stå likadant överallt
AlphaCloud är en småföretagare enligt paragraf 19 i den tyska mervärdesskattelagen. Priserna är slutpriser, moms redovisas aldrig.
Det låter som en fotnot och är i själva verket en konsekvensuppgift på många ställen: prissidan, kassadialogen, villkoren, integritetspolicyn, fakturans sidfot och inställningen hos betaltjänsten måste alla säga samma sak. Vi hade länge ett "exklusive moms" stående som helt enkelt var fel.
Och AI:n
Sedan augusti 2026 gäller transparenskraven i EU:s AI-förordning fullt ut. Den som pratar med ett AI-system måste kunna känna igen det, senast vid första interaktionen.
Den viktigaste meningen för oss från den granskningen: en juridisk sida i sidfoten räcker troligen inte. Upplysningen måste ske där interaktionen sker, alltså i själva Discord-meddelandet. Därför presenterar sig vår AI-ticketsupport självmant och har en synlig knapp för att stänga av den. Vår utförliga bedömning finns på AI-transparens.
Den röda tråden
Alla fyra exemplen har samma form: skyldigheten såg ut som en text och var i själva verket ett krav på strukturen. En inloggning på fel ställe, ett felmeddelande som avslöjar för mycket, en bekräftelse i fel kanal, en ordningsföljd som tillåter dubbel utbetalning.
Därför läser vi nu lagtext som en specifikation, och vi kontrollerar åt andra hållet också: gör koden verkligen det som våra villkor säger? Just den frågan ledde till att vi hittade två verkliga avvikelser, och om dem finns en separat artikel.
Fler artiklar
Varför nästan allt i AlphaCloud förblir gratis
De flesta Discord-botar låser in sina mest användbara funktioner bakom en prenumeration. Det gör vi medvetet inte, och det har mindre med generositet att göra än det låter.
Bakom kulissernaKoll på 4 000 Discord-servrar: Grafana, PostHog och vad de visade oss
En loop som i tysthet stod för halva vår trafik, tre miljoner meningslösa förfrågningar om dagen och en attack som var över efter en minut. Vad vår övervakning ser, och vad den medvetet inte ser.
Bakom kulissernaVad en granskning av vårt eget betalsystem visade
Två kritiska fynd, och inget av dem låg där vi skulle ha letat. En öppen redovisning av misstag som sedan dess har åtgärdats.