9-course Dutch e-learning platform fused onto atlasacademy.nl via Caddy reverse proxy. Odoo 19 Community as course engine (website_slides), static HTML for marketing front. Single Odoo account system. - static/: 8 marketing pages (index, pricing, coaching, leerpad, over, shop, bisl, esf) - backend/odoo_relay.py: lead relay Flask service (POST /academy-lead → Odoo CRM) - caddy/academy.caddyfile: full Caddy config with Odoo proxy + auth rewrites - docs/: ARCHITECTURE, USERFLOW, COURSES, DEPLOYMENT, SECURITY, ODOO Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
207 lines
8.9 KiB
Markdown
207 lines
8.9 KiB
Markdown
<div align="center">
|
|
|
|
<img src="https://atlasacademy.nl/atlas-icon.png" width="72" height="72" alt="Atlas Academy">
|
|
|
|
# Atlas Academy
|
|
|
|
**Online leerplatform voor ondernemers die bouwen**
|
|
|
|
[](https://atlasacademy.nl)
|
|
[](https://atlasacademy.nl/slides)
|
|
[](https://www.odoo.com)
|
|
[](https://hetzner.com)
|
|
[](#)
|
|
|
|
[**atlasacademy.nl**](https://atlasacademy.nl) · [Cursussen](https://atlasacademy.nl/slides) · [Coaching](https://atlasacademy.nl/coaching.html) · [Prijzen](https://atlasacademy.nl/pricing.html)
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
## Wat is dit?
|
|
|
|
Atlas Academy is een **Odoo eLearning-platform** volledig gefused met een statische marketingsite onder één domein. Geen aparte subdomains, geen dubbele login — één URL, één account, één cursusengine.
|
|
|
|
**Kernidee:** statische marketingpagina's voor branding + Odoo `/slides` als volledige cursusmotor, getranspareerd via Caddy reverse proxy op `atlasacademy.nl`.
|
|
|
|
```
|
|
Browser → atlasacademy.nl (Caddy)
|
|
├── / → static index.html (marketing homepage)
|
|
├── /pricing → static pricing.html
|
|
├── /coaching → static coaching.html
|
|
├── /slides → Odoo 19 eLearning (9 cursussen)
|
|
├── /web/login → Odoo auth (single login)
|
|
└── /web/signup → Odoo signup (open, b2c)
|
|
```
|
|
|
|
---
|
|
|
|
## Architectuur
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
│ atlasacademy.nl │
|
|
│ Caddy (atlas-01 Hetzner) │
|
|
│ │
|
|
│ ┌──────────────────────┐ ┌──────────────────────────────────┐ │
|
|
│ │ Static Marketing │ │ Odoo 19 Community (eLearning) │ │
|
|
│ │ /var/www/academy/ │ │ http://100.93.16.81:8069 │ │
|
|
│ │ │ │ │ │
|
|
│ │ index.html │ │ /slides → cursuscatalog │ │
|
|
│ │ pricing.html │ │ /slides/<slug> → cursuspagina │ │
|
|
│ │ coaching.html │ │ /web/login → inloggen │ │
|
|
│ │ leerpad.html │ │ /web/signup → registreren │ │
|
|
│ │ over.html │ │ /web/assets/* → JS/CSS │ │
|
|
│ │ shop.html │ │ │ │
|
|
│ │ bisl.html │ │ Website 3: "Atlas Academy" │ │
|
|
│ │ esf.html │ │ domain = atlasacademy.nl │ │
|
|
│ └──────────────────────┘ └──────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌──────────────────────────────────────────────────────────────┐ │
|
|
│ │ Lead Relay /academy-lead → 127.0.0.1:7793 (odoo_relay.py) │ │
|
|
│ │ (POST JSON → Odoo CRM lead + email fallback) │ │
|
|
│ └──────────────────────────────────────────────────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Cursuscatalogus
|
|
|
|
| # | Cursus | URL | Lessen | Quizvragen |
|
|
|---|--------|-----|--------|------------|
|
|
| 1 | Praktijktraining Lean | `/slides/praktijktraining-lean-1` | 7 | 21 |
|
|
| 2 | Sales vanaf Nul | `/slides/sales-vanaf-nul-2` | 10 | 30 |
|
|
| 3 | Netwerken & Relaties | `/slides/netwerken-relaties-3` | 5 | 12 |
|
|
| 4 | Strategisch Denken | `/slides/strategisch-denken-4` | 9 | 26 |
|
|
| 5 | Alles Automatiseren met AI | `/slides/alles-automatiseren-met-ai-5` | 5 | 15 |
|
|
| 6 | IT-Basis & Manier van Denken | `/slides/it-basis-manier-van-denken-6` | 3 | 9 |
|
|
| 7 | Business & Juridisch | `/slides/business-juridisch-7` | 3 | 9 |
|
|
| 8 | Marketing & Funnels | `/slides/marketing-funnels-8` | 4 | 12 |
|
|
| 9 | Startup & Groei | `/slides/startup-groei-9` | 7 | 19 |
|
|
|
|
**Totaal:** 53 lessen · 153 quizvragen
|
|
|
|
Elke cursus = theorie per les → kennischeck (multiple choice, 1 correct, met uitleg).
|
|
|
|
---
|
|
|
|
## Tech stack
|
|
|
|
| Laag | Technologie | Rol |
|
|
|------|------------|-----|
|
|
| Domein | Caddy 2 | TLS, routing, static serve, reverse proxy |
|
|
| Frontend | Vanilla HTML/CSS/JS | Marketingpagina's |
|
|
| eLearning | Odoo 19 Community (`website_slides`) | Cursussen, accounts, voortgang |
|
|
| Database | PostgreSQL (Odoo intern) | Users, cursussen, leads |
|
|
| CRM | Odoo CRM (`crm.lead`) | Leads van lead-relay |
|
|
| Lead relay | Python Flask (`odoo_relay.py`) | `POST /academy-lead` → Odoo + email |
|
|
| VPS | Hetzner CPX32 (atlas-01) | Alle services |
|
|
| Tailscale | Tailnet `100.93.16.81` | Interne Odoo bereikbaarheid |
|
|
|
|
---
|
|
|
|
## User journey
|
|
|
|
```
|
|
[Bezoeker] → atlasacademy.nl
|
|
│
|
|
├── leest marketingpagina's (pricing, coaching, over)
|
|
│
|
|
├── klikt "Bekijk de cursussen →"
|
|
│ → /slides (Odoo cursuscatalogus)
|
|
│
|
|
├── opent cursuspagina → lees les → maak quiz
|
|
│ (anoniem: preview mogelijk)
|
|
│
|
|
├── wil voortgang opslaan → "Aanmelden"
|
|
│ → /web/signup (Odoo, b2c open registratie)
|
|
│ → account aangemaakt (email bevestiging via atlasacademy.nl)
|
|
│
|
|
└── ingelogd → cursus volgen → voortgang opgeslagen
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
### Vereisten
|
|
- `atlas-01` Hetzner VPS (SSH alias in `~/.ssh/config`)
|
|
- Odoo 19 Community draait in Docker (`atlas-odoo` container)
|
|
- Caddy draait met Caddyfile in `/etc/caddy/Caddyfile`
|
|
|
|
### Static marketingpagina aanpassen
|
|
|
|
```bash
|
|
scp coaching.html atlas-01:/var/www/atlasacademy.nl/coaching.html
|
|
curl -so /dev/null -w '%{http_code}' https://atlasacademy.nl/coaching.html
|
|
```
|
|
|
|
### Cursus bouwen in Odoo
|
|
|
|
```bash
|
|
# Upload script naar atlas-01, run in Odoo ORM shell
|
|
scp my_course.py atlas-01:/tmp/
|
|
ssh atlas-01 "docker exec -i atlas-odoo odoo shell -d atlas --no-http < /tmp/my_course.py"
|
|
```
|
|
|
|
Zie [`docs/COURSES.md`](docs/COURSES.md) voor het volledige cursusformaat.
|
|
|
|
### Caddy herladen
|
|
|
|
```bash
|
|
ssh atlas-01 "caddy reload --config /etc/caddy/Caddyfile"
|
|
```
|
|
|
|
### Lead relay herstarten
|
|
|
|
```bash
|
|
ssh atlas-01 "systemctl restart atlas-academy-relay && systemctl status atlas-academy-relay"
|
|
```
|
|
|
|
---
|
|
|
|
## Security
|
|
|
|
- **Secrets:** alle credentials in `/etc/atlas/academy-relay.env` (root 600), niet in source
|
|
- **Odoo backend:** `/web` niet geproxied → admin-panel enkel via tailnet/SSO
|
|
- **Signup:** `website.auth_signup_uninvited = 'b2c'` alleen op website 3 (academy). Corp website 1 = `b2b` (gesloten)
|
|
- **Headers:** `X-Frame-Options DENY`, `X-Content-Type-Options nosniff`, `Strict-Transport-Security`
|
|
- **ESF tracker:** `X-Robots-Tag: noindex, nofollow` (persoonlijk ITMG-studieoverzicht)
|
|
|
|
Zie [`docs/SECURITY.md`](docs/SECURITY.md) voor het volledige security-model.
|
|
|
|
---
|
|
|
|
## Projectstructuur
|
|
|
|
```
|
|
atlas-academy/
|
|
├── README.md
|
|
├── docs/
|
|
│ ├── ARCHITECTURE.md # Volledige systeemarchitectuur
|
|
│ ├── USERFLOW.md # User journeys & swimlane diagrammen
|
|
│ ├── COURSES.md # Cursusstructuur & ERD
|
|
│ ├── DEPLOYMENT.md # Deployment runbook
|
|
│ ├── SECURITY.md # Security model
|
|
│ └── ODOO.md # Odoo eLearning setup & gotcha's
|
|
├── static/ # Marketingpagina's (index, pricing, coaching…)
|
|
├── backend/
|
|
│ └── odoo_relay.py # Lead relay service (Flask)
|
|
└── caddy/
|
|
└── academy.caddyfile # Caddy-configuratie voor atlasacademy.nl
|
|
```
|
|
|
|
---
|
|
|
|
## Licentie & eigendom
|
|
|
|
Proprietary — Atlas Corporation, Tilburg NL. Alle rechten voorbehouden.
|
|
|
|
**Operator:** Chaib Aarab — [info@atlascorporation.nl](mailto:info@atlascorporation.nl)
|
|
|
|
---
|
|
|
|
<div align="center">
|
|
<sub>Built with Odoo 19 Community · Caddy · Hetzner · Atlas Corporation 2026</sub>
|
|
</div>
|