atlas-academy/docs/COURSES.md
Atlas Developer 03829a38b2 feat: Atlas Academy — Odoo eLearning platform, full fusion
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>
2026-06-23 00:48:45 +02:00

4.6 KiB
Raw Blame History

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: 300500 woorden, plain HTML (<h2>, <p>, <ul>)
  • Quizvragen per les: minimaal 3, maximaal 5
  • Antwoordopties: altijd 3, precies 1 correct
  • Uitleg: altijd een comment bij 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.