TNCSC_Odoo/README.md
metatroncubeswdev a848373429 feat(scaffold): Phase 0 - repo scaffold, Docker dev stack, CI guardrails
Scaffolds the CommunityOS monorepo per the implementation plan: 8
brand-neutral product modules (community_theme_base, community_membership,
event_qr_ticketing, community_school, community_classifieds,
community_benefits, community_interac, community_portal) plus the
tncsc_deployment client layer, each with an App-Store-ready manifest,
LGPL-3 license, and empty security/data/demo/tests/views scaffolding.

Adds deploy/docker-compose.yml (Odoo 19 CE + Postgres 16), CI workflow
that installs all modules with --test-enable, and scripts/check_brand_leak.py
+ check_manifests.py enforcing the no-client-identity-in-product-code and
manifest-completeness rules. Verified locally: all 9 modules install clean
on a fresh Odoo 19 database, and the brand-leak check correctly fails when
a client term is added to a product module and passes once removed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 18:48:01 -04:00

94 lines
4.7 KiB
Markdown

# 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 |
## Local development
```bash
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.
## 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.