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>
4.6 KiB
4.6 KiB
Cursusstructuur — Atlas Academy
Catalogus
| ID | Naam | Slug | Secties | Lessen | Quizvragen | Cover kleur |
|---|---|---|---|---|---|---|
| 1 | Praktijktraining Lean | praktijktraining-lean-1 |
2 | 7 | 21 | #1a4fa0 |
| 2 | Sales vanaf Nul | sales-vanaf-nul-2 |
2 | 10 | 30 | #0f7a3d |
| 3 | Netwerken & Relaties | netwerken-relaties-3 |
1 | 5 | 12 | #7b2d8b |
| 4 | Strategisch Denken | strategisch-denken-4 |
2 | 9 | 26 | #c47a1e |
| 5 | Alles Automatiseren met AI | alles-automatiseren-met-ai-5 |
1 | 5 | 15 | #1a8a8a |
| 6 | IT-Basis & Manier van Denken | it-basis-manier-van-denken-6 |
1 | 3 | 9 | #8a3a1a |
| 7 | Business & Juridisch | business-juridisch-7 |
1 | 3 | 9 | #2a6a8a |
| 8 | Marketing & Funnels | marketing-funnels-8 |
1 | 4 | 12 | #8a1a4a |
| 9 | Startup & Groei | startup-groei-9 |
2 | 7 | 19 | #3a7a1a |
Totaal: 53 lessen · 153 quizvragen
URL-patroon: https://atlasacademy.nl/slides/<slug>
Cursusstructuur (Odoo-modellen)
slide.channel — Cursus
{
'name': 'Sales vanaf Nul',
'website_id': 3, # Atlas Academy
'website_published': True,
'website_slug': 'sales-vanaf-nul-2',
'cover_properties': '{"background-color": "#0f7a3d", ...}',
'channel_type': 'documentation',
}
slide.slide — Sectie (is_category=True)
{
'channel_id': 2,
'name': 'Deel 1: Mindset & Voorbereiding',
'is_category': True,
'sequence': 1,
}
slide.slide — Les (artikel)
{
'channel_id': 2,
'name': 'Les 1 — De verkoper als adviseur',
'slide_category': 'article',
'is_category': False,
'category_id': <sectie-id>,
'html_content': '<p>Theorie tekst...</p>',
'sequence': 2,
'website_published': True,
}
slide.question — Quizvraag
{
'slide_id': <les-id>,
'question': 'Wat is het primaire doel van een adviseur-verkoper?',
}
slide.answer — Antwoordoptie
{
'question_id': <vraag-id>,
'text_value': 'Vertrouwen opbouwen en de klant echte waarde bieden',
'is_correct': True,
'comment': 'Een adviseur-verkoper stelt klantbelang centraal.',
}
Cursus bouwen via ORM shell
# save als /tmp/build_cursus.py, dan:
# ssh atlas-01 "docker exec -i atlas-odoo odoo shell -d atlas --no-http < /tmp/build_cursus.py"
env = env # Odoo shell
# 1. Cursus aanmaken
channel = env['slide.channel'].sudo().create({
'name': 'Mijn Nieuwe Cursus',
'website_id': 3,
'website_published': True,
'channel_type': 'documentation',
})
# 2. Sectie toevoegen
sectie = env['slide.slide'].sudo().create({
'channel_id': channel.id,
'name': 'Deel 1: Introductie',
'is_category': True,
'sequence': 1,
})
# 3. Les toevoegen
les = env['slide.slide'].sudo().create({
'channel_id': channel.id,
'name': 'Les 1 — Overzicht',
'slide_category': 'article',
'is_category': False,
'category_id': sectie.id,
'html_content': '<p>Theorie...</p>',
'sequence': 2,
'website_published': True,
})
# 4. Quizvraag + antwoorden
vraag = env['slide.question'].sudo().create({
'slide_id': les.id,
'question': 'Wat leer je in les 1?',
})
for tekst, correct, uitleg in [
('Optie A', True, 'Correct omdat...'),
('Optie B', False, 'Fout omdat...'),
('Optie C', False, 'Fout omdat...'),
]:
env['slide.answer'].sudo().create({
'question_id': vraag.id,
'text_value': tekst,
'is_correct': correct,
'comment': uitleg,
})
env.cr.commit()
print(f"Cursus aangemaakt: /slides/{channel.website_slug}")
Content-richtlijnen
- Theorie per les: 300–500 woorden, plain HTML (
<h2>,<p>,<ul>) - Quizvragen per les: minimaal 3, maximaal 5
- Antwoordopties: altijd 3, precies 1 correct
- Uitleg: altijd een
commentbij elke optie (leermoment) - Toon: generiek en professioneel — niet Chaib-centric, voor de community
- Taal: Nederlands
Slug-conventie
<naam-in-kebab-case>-<channel-id>
Voorbeeld: channel ID 4, naam "Strategisch Denken" → strategisch-denken-4
Odoo genereert de slug automatisch op basis van de naam bij aanmaken.
ESF / BiSL (apart, nog te migreren)
| Pagina | Status | Doel |
|---|---|---|
bisl.html |
Statisch (actief) | BiSL Foundation examentrainer (custom engine) |
bisl_examen.html |
Statisch (actief) | ~82-97 vragen, eigen JS-quizengine |
esf.html |
Statisch, noindex | Persoonlijk ITMG ESF-studieoverzicht |
Migratie naar Odoo eLearning is gepland maar niet launch-blocking.