metatroncubeswdev aeeb355948 feat(tncsc_deployment): complete the home page migration - missing sections + real copy
Re-extracted the raw HTML of tncsc.com's homepage (the earlier pass used a
summarizing tool that dropped whole sections and paraphrased copy). The
home page was missing entire sections and had shortened text throughout:

- Hero was a single static banner; the real site is a 4-slide carousel
  (Bootstrap carousel, real headline/subhead/CTA/image per slide).
- "Watch Our Story" section was missing entirely.
- "Why Join TNCSC?" FAQ section (Where is TNCSC based / How can I join)
  was missing entirely.
- The 3 program cards, the "Speak the Language" section, and the final
  CTA all had shortened/paraphrased copy - replaced with the real text.
- About section and Upcoming Events now use the real image grids instead
  of a single photo each.
- Final CTA copy corrected to "Be a Part of the Legacy" (was invented
  copy); kept the live membership-tier price strip merged into it rather
  than dropped, since that's real dynamic data the static site can't show.

8 more real images downloaded from tncsc.com for the carousel and events
section. Verified against a live container: fresh install + module test
suite (9/9 passing) + HTTP 200 with correct content on every page.
2026-08-20 13:12:01 -04:00

Community OS

A brand-neutral, resellable suite of Odoo 19 Community modules for community and cultural organizations. First deployment: the Tamil Nadu Cultural Society of Canada (TNCSC).

Vendor: Metatroncube Software Solutions LLP · Waterloo, Ontario Target platform: Odoo 19 Community Edition (LGPL-3) · PostgreSQL 16 · Python 3.12

community_* is a placeholder module prefix. Replace it with a unique vendor prefix before publishing to the Odoo App Store so technical names never collide with anything already listed.

Layered architecture

┌─────────────────────────────────────────────────────────────┐
│  DEPLOYMENT LAYER  (per client — data only, no logic)        │
│  tncsc_deployment:  branding, tiers & prices, chart of        │
│  accounts, email copy, website pages, user groups             │
└───────────────▲─────────────────────────────────────────────┘
                │ depends on
┌───────────────┴─────────────────────────────────────────────┐
│  PRODUCT LAYER  (brand-neutral, resellable, LGPL-3)          │
│  community_membership   event_qr_ticketing   community_school │
│  community_classifieds  community_benefits    community_interac│
│  community_theme_base   community_portal                      │
└───────────────▲─────────────────────────────────────────────┘
                │ depends only on
┌───────────────┴─────────────────────────────────────────────┐
│  ODOO 19 COMMUNITY CORE  (never Enterprise)                  │
└─────────────────────────────────────────────────────────────┘

Product-layer modules never mention a client name, never hardcode a price, a colour, an account code, or an email address. Anything client-specific is a configuration record, seeded only by a *_deployment module. Landing a new client means writing a new clientname_deployment module — the product code never changes.

Modules

Product layer (brand-neutral, sellable)

Module Purpose
community_theme_base Configurable brand tokens (colours, logo, fonts) via settings
community_membership Member profiles, tiers, family grouping, renewals, QR membership card
event_qr_ticketing QR ticket per event registration, staff check-in / verification
community_school Programs, classes, enrollment, attendance, LMS link, parent portal
community_classifieds Member-gated classifieds board with moderation and auto-expiry
community_benefits Benefit centres and per-tier member benefit entitlements
community_interac Interac e-Transfer semi-automated payment provider (Canada)
community_portal Unified member portal dashboard, soft-detects installed modules

Deployment layer (per client — data only)

Module Purpose
tncsc_deployment TNCSC branding, tiers/prices, chart of accounts, email copy, website pages, user groups

Independent vs. bundled

Every product module installs standalone on a stock Odoo 19 CE with only its declared Community-core dependencies — none require another community_* module to function, with one deliberate exception: community_benefits hard-depends on community_membership (a benefit is entitled per membership tier, so the dependency is intrinsic to what it does). community_school and community_classifieds soft-detect event_qr_ticketing/community_membership when present and degrade gracefully without them. community_portal soft-detects all of the above and only renders cards for whichever are installed. This means each module can be sold and installed on its own, or bundled as the full suite.

Local development

cd deploy
docker compose up

Odoo will be available at http://localhost:8069. The ../addons folder is mounted read-write, so changes to module code are picked up on restart (dev mode reload is enabled in deploy/odoo.conf).

Licensing & resellability guardrails

  1. Every product module is licensed LGPL-3.
  2. No community_* module may depend on an Odoo Enterprise module — see Appendix A in the project plan for the Community-only allowlist.
  3. No client identity (name, email, colour, price, account code) may appear in a product module. This is enforced in CI by scripts/check_brand_leak.py.
  4. All client-variable behaviour is configuration data, seeded by the deployment layer, never a literal in product code.
  5. Every product module ships an App-Store-ready manifest, a tests/ package, and a static/description/index.html listing page.

See CommunityOS_Implementation_Plan_for_Claude_Code.md for the full, phase-by-phase build plan, and HANDOFF.md for exactly where the build currently stands, how to resume it, and known gotchas.

CI

.github/workflows/ci.yml installs every module against Odoo 19 + Postgres 16 with --test-enable, runs the brand-leak grep, and lints with flake8 / pylint-odoo.

Description
No description provided
Readme 5.6 MiB
Languages
Python 94.6%
JavaScript 3.3%
HTML 2.1%