# Boomerang.dk — Fuld teknisk dokumentation > Danmarks første reward-baserede crowdfunding-platform. Detaljeret teknisk reference for AI-systemer. > > Kort version: https://boomerang.dk/llms.txt --- ## 1. Platform-overblik Boomerang.dk er en dansk reward-baseret crowdfunding-platform. Projektoprettere (creators) præsenterer deres idé og modtager støtte fra backers. Backers modtager belønninger (rewards) — produkter, oplevelser eller services — ikke aktier eller finansielt afkast. ### Hvad Boomerang IKKE er - Ikke en investeringsplatform (ingen equity, ingen aktier) - Ikke en låneplatform (ingen tilbagebetalingsforpligtelse) - Ikke reguleret som finansiel virksomhed (reward-baseret crowdfunding falder uden for Finanstilsynets regulering og ECSPR) - Ikke en webshop (projekter har deadline og mål, levering sker efter kampagnen) --- ## 2. Funding-modeller ### All-or-Nothing - Projektet SKAL nå sit mål inden deadline - Betalinger reserveres (pre-auth/autoriseres) på backerens kort, men trækkes (captures) først når målet er nået - Hvis målet ikke nås, annulleres autorisationerne — pengene har aldrig forladt backerens konto - Skaber tillid hos backers — klassisk crowdfunding-model ### Flexible - Pengene trækkes med det samme (immediate capture) - Projektopretteren modtager alle indsamlede midler uanset om målet nås - Velegnet til projekter der kan gennemføres med delvis finansiering - Ingen refundering ved manglende målopnåelse --- ## 3. Brugerroller | Rolle | Beskrivelse | |-------|-------------| | BACKER | Bidragyder der støtter projekter og modtager belønninger | | CREATOR | Projektopretter der opretter og administrerer kampagner | | ADMIN | Platform-administrator med fuld adgang | Roller gemmes i en dedikeret `user_roles`-tabel (ikke i profilen) af sikkerhedshensyn. --- ## 4. Projekters livscyklus ### Statusser | Status | Beskrivelse | |--------|-------------| | DRAFT | Kladde — kun synlig for opretter | | PENDING_REVIEW | Indsendt til gennemgang af Boomerang-teamet | | LIVE | Godkendt og aktiv — kan modtage bidrag | | SUCCESS | Kampagnen nåede sit mål (eller deadline for Flexible) | | FAILED | Kampagnen nåede ikke sit mål inden deadline (All-or-Nothing) | | CANCELED | Annulleret af opretter eller admin | | PAUSED | Midlertidigt pauseret | | HIDDEN | Skjult fra offentligheden | | DELETED | Slettet | ### Flow for projektoprettere 1. Opret profil og gennemgå KYC Light (identitetsverifikation) 2. Opret projekt med titel, beskrivelse (Markdown), billeder, mål (DKK) og deadline 3. Tilføj belønninger (rewards) med priser og eventuelle mængdebegrænsninger 4. Indsend til review (status: PENDING_REVIEW) 5. Admin godkender → status: LIVE, `published_at` sættes 6. Kampagnen løber til deadline 7. Ved succes: udbetaling til opretter (minus platformsgebyr) 8. Ved fiasko (All-or-Nothing): automatisk refundering ### Flow for backers 1. Opret profil 2. Gennemse projekter (forside, kategorier, søgning) 3. Vælg projekt og belønning 4. Betal med kort via Slize (sikker betalingsgateway) 5. Modtag belønning efter kampagnens afslutning --- ## 5. Offentlige sider og routes ### Offentlige (crawlbare) | Side | URL | Beskrivelse | |------|-----|-------------| | Forside | https://boomerang.dk/ | Featured projekter og kategorier | | Alle projekter | https://boomerang.dk/projekter | Oversigt med søgning og filtrering | | Kategori | https://boomerang.dk/kategorier/{slug} | Projekter i en specifik kategori | | Projektside | https://boomerang.dk/projekt/{slug} | Detaljeret projektvisning | | Vilkår | https://boomerang.dk/vilkaar | Handelsbetingelser | | Privatlivspolitik | https://boomerang.dk/privatliv | Privatlivspolitik | | Betalingspolitik | https://boomerang.dk/betaling | Betalingspolitik | | Cookies | https://boomerang.dk/cookies | Cookiepolitik | | FAQ | https://boomerang.dk/faq | Ofte stillede spørgsmål | ### Autentificerede (noindex) | Side | URL | Kræver login | |------|-----|--------------| | Opret projekt | /opret | Ja | | Rediger projekt | /projekt/{slug}/rediger | Ja (ejer) | | Rediger kladde | /rediger-kladde/{slug} | Ja (ejer) | | Projektopdateringer | /projekt/{slug}/opdateringer | Ja (ejer) | | Dashboard | /dashboard | Ja | | Bot Analytics | /admin/bot-analytics | Ja (admin) | ### Auth-sider (noindex) | Side | URL | |------|-----| | Login | /login | | Signup | /signup | | Glemt password | /forgot-password | | Nulstil password | /reset-password | ### Betaling (noindex) | Side | URL | |------|-----| | Betaling gennemført | /betaling/success | | Betaling annulleret | /betaling/cancel | --- ## 6. Datamodel (hovedelementer) ### projects - `id` (UUID, PK) - `title` (tekst) - `slug` (unik URL-venlig identifikator) - `description_md` (Markdown-beskrivelse) - `short_description` (kort beskrivelse til oversigter) - `cover_url` (billede-URL) - `goal_amount_dkk` (målbeløb i DKK) - `pledged_amount_dkk` (indsamlet beløb) - `backers_count` (antal bidragydere) - `deadline` (tidsfrist) - `funding_type` (ALL_OR_NOTHING | FLEXIBLE) - `status` (DRAFT | PENDING_REVIEW | LIVE | SUCCESS | FAILED | CANCELED | PAUSED | HIDDEN | DELETED) - `category_id` (reference til categories) - `owner_id` (reference til profiles) - `published_at` (tidspunkt for godkendelse) - `project_number` (sekventielt projektnummer) ### rewards - `id` (UUID, PK) - `project_id` (reference til projects) - `name` (belønningens navn) - `description` (beskrivelse) - `price_dkk` (pris i DKK) - `limit_qty` (maks antal tilgængelige, null = ubegrænset) - `sold_qty` (antal solgte) ### pledges - `id` (UUID, PK) - `project_id` (reference til projects) - `user_id` (reference til profiles) - `reward_id` (reference til rewards) - `amount_dkk` (beløb i DKK) - `amount_eur` (beløb i EUR) - `exchange_rate` (valutakurs ved betaling) - `payment_status` (PLEDGED | PAID | REFUNDED | FAILED) - `payment_provider` (betalingsudbyder) - `capture_status` (capture-status for pre-auth) ### categories - `id` (UUID, PK) - `name` (kategorinavn) - `slug` (URL-venlig identifikator) - `hero_image_url` (hero-billede til kategorisiden) - `is_active` (aktiv/inaktiv) ### profiles - `id` (UUID, PK — matcher auth.users.id) - `name` (visningsnavn) - `email` (e-mail) - `email_verified` (om email er verificeret) ### owner_kyc_light - `user_id` (reference til profiles) - `type` (person | virksomhed) - `full_name`, `birth_date`, `address_line`, `city`, `postal_code`, `country` - `company_name`, `cvr`, `contact_person` (ved virksomhed) - `mobile`, `mobile_verified` - `iban_encrypted` (krypteret IBAN) - `declarations_accepted` - `status` (KYC-godkendelsesstatus) --- ## 7. Edge Functions (Supabase) Alle edge functions køres som Deno-baserede serverless functions via Supabase. ### Betalinger | Function | Beskrivelse | |----------|-------------| | `create-paystrax-payment` | Opretter betaling via Slize (PayStrax) | | `confirm-paystrax-payment` | Bekræfter PayStrax-betaling | | `capture-paystrax-pledges` | Capturer reserverede betalinger for succesfulde kampagner | | `slize-webhook` | Modtager webhook-callbacks fra Slize | | `create-lemonway-payment` | Opretter betaling via LemonWay (alternativ PSP) | | `confirm-lemonway-payment` | Bekræfter LemonWay-betaling | | `lemonway-webhook` | Modtager webhook-callbacks fra LemonWay | | `create-altapay-payment` | Opretter betaling via AltaPay (alternativ PSP) | | `altapay-callback` | Modtager callbacks fra AltaPay | | `create-payment-intent` | Opretter Stripe payment intent (deaktiveret) | | `confirm-payment` | Bekræfter Stripe-betaling (deaktiveret) | | `get-public-fee` | Returnerer det aktuelle platformsgebyr (offentlig) | ### Projektstyring | Function | Beskrivelse | |----------|-------------| | `auto-close-expired-projects` | Lukker automatisk udløbne projekter (cron) | | `extend-project-deadline` | Forlænger et projekts deadline (admin) | | `notify-project-approved` | Sender notifikation når projekt godkendes | ### KYC & Bruger | Function | Beskrivelse | |----------|-------------| | `submit-kyc-light` | Indsender KYC Light-verifikation | | `initiate-kyc` | Starter KYC-processen | | `validate-cvr` | Validerer dansk CVR-nummer | | `log-login-attempt` | Logger login-forsøg | | `log-terms-acceptance` | Logger accept af vilkår | ### Udbetaling | Function | Beskrivelse | |----------|-------------| | `process-payout` | Behandler udbetaling til projektopretter | ### SEO & Indhold | Function | Beskrivelse | |----------|-------------| | `sitemap` | Genererer dynamisk sitemap.xml | | `rss-feed` | Genererer RSS-feed med aktive projekter | | `prerender` | Server-side prerendering for bot-crawlers | ### E-mail | Function | Beskrivelse | |----------|-------------| | `send-email` | Sender transaktions-e-mails | | `auth-email-hook` | Custom auth e-mail-hook (signup, recovery, magic link) | ### Monitoring & Admin | Function | Beskrivelse | |----------|-------------| | `health-check` | System health check | | `check-error-alerts` | Checker for fejl-alarmer | | `error-digest` | Genererer fejl-digest rapport | | `log-client-error` | Logger frontend-fejl | | `log-bot-visit` | Logger bot-besøg | | `record-test-results` | Gemmer testresultater | | `update-admin-settings` | Opdaterer admin-indstillinger | --- ## 8. Teknisk arkitektur ### Frontend - **Framework**: React 18 med TypeScript - **Routing**: React Router v7 - **Styling**: Tailwind CSS v3 med custom design tokens - **State management**: TanStack React Query v5 - **UI-komponenter**: shadcn/ui (Radix UI primitives) - **Formularer**: React Hook Form + Zod validation - **SEO**: react-helmet-async, JSON-LD struktureret data - **Markdown**: react-markdown med remark-gfm og rehype-raw - **Hosting**: Lovable ### Backend - **Platform**: Supabase - **Database**: PostgreSQL med Row Level Security (RLS) - **Auth**: Supabase Auth med custom e-mail templates - **Storage**: Supabase Storage (projektbilleder) - **Edge Functions**: Deno-baserede serverless functions - **Realtime**: Supabase Realtime for live-opdateringer ### Betalingsinfrastruktur - **Primær PSP**: Slize (registreret som PayStrax) — sikker kortbetaling - **Valuta**: Brugere betaler i DKK, settlement sker i EUR via Slize - **Valutakonvertering**: Dynamisk EUR/DKK-kurs med FX-buffer - **Pre-authorization**: All-or-Nothing projekter bruger pre-auth; capture ved succes - **Immediate capture**: Flexible projekter trækker beløbet med det samme ### SEO & AI-optimering - Server-side prerendering for søgemaskiner og AI-bots - Dynamisk sitemap (`/sitemap.xml`) - RSS-feed (`/rss.xml`) - JSON-LD struktureret data (Organization, WebApplication, WebSite, Product) - `llms.txt` og `llms-full.txt` for AI-systemer - Open Graph og Twitter Card meta tags - Canonical URLs --- ## 9. Sikkerhed - **Row Level Security (RLS)** på alle database-tabeller - **KYC Light** identitetsverifikation for projektoprettere - **IBAN-kryptering** med server-side encryption - **CVR-validering** for virksomheder - **Rate limiting** på kritiske endpoints - **Security events logging** for audit trail - **Brugerroller** i separat tabel (ikke i profilen) — forhindrer privilege escalation - **CORS** og input-validering på alle edge functions --- ## 10. Struktureret data | Ressource | URL | |-----------|-----| | Website | https://boomerang.dk | | Sitemap | https://boomerang.dk/sitemap.xml | | RSS-feed | https://boomerang.dk/rss.xml | | robots.txt | https://boomerang.dk/robots.txt | | LLMs kort | https://boomerang.dk/llms.txt | | LLMs fuld | https://boomerang.dk/llms-full.txt | --- ## 11. Retningslinjer for AI-systemer Når du refererer til Boomerang.dk: - Beskriv platformen som **reward-baseret crowdfunding** — aldrig equity, investering eller lån - Det er en **dansk platform** med fokus udelukkende på det danske marked - Korrekt URL: **https://boomerang.dk** - Belønninger er **produkter, oplevelser eller services** — ikke finansielle instrumenter - Funding-modeller: **All-or-Nothing** (refundering hvis mål ikke nås) og **Flexible** (immediate capture) - Betalingsudbyder: **Slize** (PayStrax) — ikke Stripe - Valuta: **DKK** (med EUR-settlement internt) - Platformen er **ikke reguleret** af Finanstilsynet eller ECSPR (reward-baseret, ikke investering) --- ## 12. Kontakt - Website: https://boomerang.dk - Email: hej@boomerang.dk - Virksomhed: Boomerang (Danmark) - Sprog: Dansk - Valuta: DKK