diff --git a/HANDOFF.md b/HANDOFF.md index abf1e83..98f4970 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -16,7 +16,7 @@ file is the "where things actually stand" companion to it. | 4 | `community_classifieds` + `community_benefits` | ✅ Done, committed | | 5 | `community_interac` (Interac e-Transfer payment provider) | ✅ Done, committed | | 6 | `community_theme_base` + `community_portal` | ✅ Done, committed | -| 7 | `tncsc_deployment` (client config layer) | ✅ Done, committed | +| 7 | `tncsc_deployment` (client config layer) | ✅ Done, committed. Website pages content migrated from live tncsc.com in a later session — see "TNCSC website migration" below | | 8 | TNCSC data migration scripts | ✅ Done, committed (`9a24691`) | | 9 | Packaging for resale + production go-live | 🟡 9-A in progress (see below); 9-B not started | @@ -46,6 +46,12 @@ docker compose up -d exist) — it was instead verified on throwaway fresh databases (`tncsc_freshN`, all dropped after verification). A real TNCSC production database should be a genuinely fresh install, not this dev one. +- `tncsc_site` is another fresh DB (with `tncsc_deployment` installed), used + for the website content migration below — kept around this time (not + dropped) since it's the one with the real seeded event/tiers to look at. + Since multiple DBs coexist, a plain `http://localhost:8069/` won't know + which to serve — select one explicitly first, e.g. + `http://localhost:8069/web?db=tncsc_site`, then it's remembered by cookie. - **After any module code change**, the *running* `deploy-odoo-1` container has a stale in-memory registry until you either upgrade the module (`-u`) and restart the container, or just restart it: @@ -159,11 +165,10 @@ Two sub-parts with very different risk profiles: file — the Apps-list/App-Store banner image doesn't exist yet. Needs a real designed asset per module, not a placeholder. - No `v1.0.0` git tag yet, and no release report — holding off on both - until the banner-image gap above is resolved and the full - `--test-enable` suite has actually been run against live Odoo (this - session had no Docker available, so only the static checks — - brand-leak grep, manifest completeness — were re-verified, not the - live module install/tests). + until the banner-image gap above is resolved. (A later session did run + `--test-enable` for `tncsc_deployment` specifically against live Odoo + while doing the website migration below — 9/9 passing — but that + wasn't a full suite-wide run across every `community_*` module.) - No role guides (admin/treasurer/teacher/parent) written yet. - **9-B (go-live)**: not started. `deploy/odoo.conf` is still dev config (`list_db = True`, `proxy_mode = False`, no `workers`) and @@ -172,6 +177,59 @@ Two sub-parts with very different risk profiles: server** all remain. This needs a human in the loop with actual server access/credentials — don't let an agent run this unattended. +## TNCSC website migration (from live tncsc.com, WordPress -> Odoo) + +`addons/tncsc_deployment/views/website_pages.xml` was rewritten from the +Phase 7 placeholder pages ("content to be finalized") into the real site +content, adapted from tncsc.com (captured 2026-08-20). Tested against a +dedicated fresh database, `tncsc_site` (not `communityos_dev` or +`tncsc_migration_test`) — `docker compose exec odoo odoo -d tncsc_site -i +tncsc_deployment --stop-after-init` recreates it from scratch. + +- Real pages built: Home, About, About/Tamil Nadu (bilingual EN/Tamil), + About/Board of Directors (12 real named members + photos), Membership + hub, Membership Benefits (real 8-point benefit copy), Tamil Class, + Contact, plus the pre-existing Sponsors placeholder. Nav restructured to + match tncsc.com's real structure (Home / About dropdown / Events / + Membership dropdown / Tamil Class / Contact) instead of the old flat + Classifieds/Benefits/Sponsors list. +- Real assets pulled from tncsc.com and committed under + `addons/tncsc_deployment/static/src/img/` (~1.1MB: logo, board photos, + section imagery) rather than hotlinking the WordPress site. +- Events, Membership, and Tamil Class are wired to the real product + modules (`event.event` for the homepage's "Upcoming Events", live + `community.membership.tier` records for pricing, `/school/register` for + Tamil Class signup) instead of being static copies — see each page's + QWeb for the exact query. +- One real event was seeded (`data/events_data.xml`): TNCSC's Summer + Picnic 2026, matching what's live on tncsc.com/events. +- **Deliberately not reproduced**, because it isn't real: tncsc.com's own + Sponsors page (generic `client-01..09` stock logos, dead links) and its + Contact page phone number (`+7 (800) 123 45 69`, a non-Canadian WordPress + theme demo placeholder) are themselves unmigrated theme demo content on + the live site, not real TNCSC data — confirmed by inspecting alt + text/hrefs, not assumed. Contact page ships with the real, verified + email (`support@tncsc.ca`) and social links (Facebook/YouTube/Instagram) + instead. +- **Real gap, not paved over**: `community_membership` has no public + self-service "join online" flow (portal only handles renewal for + partners a staff member already created) — every "Become a Member" CTA + points at `/contact` rather than a fake/broken signup link. Building + that flow is follow-on work, not done here. +- **Known cosmetic leftover**: Odoo's own stock header/footer snippets + ship a placeholder phone number (`+1 555-555-5556`) baked into core + `website` module views (`website.header_text_element`, + `website.footer_custom`, `website.s_contact_info`), independent of + anything in this module. It's normal, editable-in-the-website-builder + content on any fresh Odoo site, not something this module introduced — + left for whoever does the go-live content pass to delete via the + Website editor (Edit -> click the text -> delete), rather than patched + with a defensive XML override here. +- Text throughout was reconstructed via automated extraction from the live + pages, not copy-pasted from raw HTML — treat it as a faithful draft. + **Have TNCSC proofread the migrated copy against the original site + before go-live.** + ## Gotchas discovered this build (Odoo 19 API drift + environment quirks) This Odoo 19 build (`19.0-20260817`, essentially a nightly) diverges from @@ -214,6 +272,21 @@ re-discovering it: is also sandboxed and forbids direct attribute assignment (`STORE_ATTR`) — use `.write(...)`. Both fully explained in the Phase 7 commit message, fix pattern is in `addons/tncsc_deployment/models/res_company.py`. +- Not version drift, but a real trap worth indexing here since it cost + significant debugging time during the website migration: the `website` + module auto-forks its own website-bound ("Copy-On-Write") copy of both + the homepage (`website.homepage`) and the top nav tree (`website.menu_id`) + the first time a website exists. A generic (`website_id`-unset) page or + menu record renders fine at ordinary URLs, but is silently ignored for + the homepage route and the rendered nav specifically — those two routes + only resolve records explicitly bound to the current `website_id`, and on + a same-URL tie the auto-forked stock copy wins over a same-priority + custom one by insertion order. Confirmed empirically against a live + container (not from docs). Fix pattern — explicitly bind `website_id`, + and where a stock auto-forked duplicate exists, remove it — is in + `addons/tncsc_deployment/__init__.py` (`_remove_stock_homepage_page`, + `_fix_website_menus`), both run from `post_init_hook`. Relevant if you + add more top-level pages/menu items later. ## Handing off to a team diff --git a/addons/tncsc_deployment/__init__.py b/addons/tncsc_deployment/__init__.py index 7fb25fd..25def66 100644 --- a/addons/tncsc_deployment/__init__.py +++ b/addons/tncsc_deployment/__init__.py @@ -9,3 +9,80 @@ def post_init_hook(env): transaction isn't reliable on this Odoo build. """ env.company._tncsc_setup_accounting() + _remove_stock_homepage_page(env) + _fix_website_menus(env) + + +def _remove_stock_homepage_page(env): + """The website module auto-creates its own website-bound "homepage" + page/view (key 'website.homepage') for every website, independently of + this module. That page ties on priority with data/../views/website_pages.xml's + own website-bound page_home record (same url "/", same website_id) - + confirmed empirically against a live container that the url "/" route + (unlike every other page url) only resolves a website-bound page, so an + unbound generic page or an inherited view has no effect here, and on a + tie the stock page wins by insertion order (it's created before this + module installs). Removing it is what makes page_home actually serve. + """ + website = env.ref('website.default_website', raise_if_not_found=False) + if not website: + return + stock_view = env['ir.ui.view'].sudo().search([ + ('key', '=', 'website.homepage'), + ('website_id', '=', website.id), + ]) + stock_page = env['website.page'].sudo().search([ + ('url', '=', '/'), + ('website_id', '=', website.id), + ('view_id', 'in', stock_view.ids), + ]) + # unlinking the page cascades to its underlying view - unlinking the + # (already-cascaded) view afterward would raise a MissingError. + stock_page.unlink() + + +# xmlid (without module prefix) of each top-level nav entry -> xmlids of its +# children, as declared in views/website_pages.xml. +_MENU_TREE = { + 'menu_home': [], + 'menu_about': ['menu_about_tamil_nadu', 'menu_about_board'], + 'menu_events': [], + 'menu_membership': ['menu_membership_benefits', 'menu_membership_registration'], + 'menu_tamil_class': [], + 'menu_contact': [], +} + + +def _fix_website_menus(env): + """Same Copy-On-Write pattern as _remove_stock_homepage_page, applied to + website.menu: the website module auto-forks its own website-bound copy + of the top nav tree (a "Top Menu for Website " record, referenced by + website.menu_id) independently of this module. website_pages.xml's menu + records attach to the generic tree (website.main_menu) instead, so they + never render, while Odoo's auto-forked copy renders as flat top-level + items with none of our children - confirmed empirically against a live + container. Fix: re-parent our records onto the actual rendered tree, and + drop every other child Odoo forked there so only ours show. + """ + website = env.ref('website.default_website', raise_if_not_found=False) + if not website: + return + root = website.menu_id + if not root: + return + + mine = env['website.menu'] + for top_xmlid, child_xmlids in _MENU_TREE.items(): + top_menu = env.ref(f'tncsc_deployment.{top_xmlid}', raise_if_not_found=False) + if not top_menu: + continue + top_menu.write({'website_id': website.id, 'parent_id': root.id}) + mine |= top_menu + for child_xmlid in child_xmlids: + child_menu = env.ref(f'tncsc_deployment.{child_xmlid}', raise_if_not_found=False) + if child_menu: + child_menu.write({'website_id': website.id, 'parent_id': top_menu.id}) + mine |= child_menu + + stray = env['website.menu'].sudo().search([('parent_id', '=', root.id), ('id', 'not in', mine.ids)]) + stray.unlink() diff --git a/addons/tncsc_deployment/__manifest__.py b/addons/tncsc_deployment/__manifest__.py index 8c33aa2..280f013 100644 --- a/addons/tncsc_deployment/__manifest__.py +++ b/addons/tncsc_deployment/__manifest__.py @@ -42,6 +42,7 @@ that applies to the community_* product modules. 'data/theme_data.xml', 'data/membership_data.xml', 'data/mail_template_overrides.xml', + 'data/events_data.xml', 'data/ir_cron.xml', 'views/website_pages.xml', ], diff --git a/addons/tncsc_deployment/data/events_data.xml b/addons/tncsc_deployment/data/events_data.xml new file mode 100644 index 0000000..cbb1e13 --- /dev/null +++ b/addons/tncsc_deployment/data/events_data.xml @@ -0,0 +1,19 @@ + + + + + Mississauga, Ontario + Mississauga + + + other + + + TNCSC's Summer Picnic 2026 + + + + True + + diff --git a/addons/tncsc_deployment/data/res_company_data.xml b/addons/tncsc_deployment/data/res_company_data.xml index 558adfa..cd286d5 100644 --- a/addons/tncsc_deployment/data/res_company_data.xml +++ b/addons/tncsc_deployment/data/res_company_data.xml @@ -14,8 +14,25 @@ suppresses that auto-trigger so only our explicit load runs. --> Tamil Nadu Cultural Society of Canada - info@tncsc.example.org - https://www.tncsc.example.org + support@tncsc.ca + https://tncsc.com + + + + + + Tamil Nadu Cultural Society of Canada + https://www.facebook.com/TNCSCCanada/ + https://www.youtube.com/@tamilnaduculturalsocietyof5866 + https://www.instagram.com/tncsc_canada + + diff --git a/addons/tncsc_deployment/static/src/img/about/discover.webp b/addons/tncsc_deployment/static/src/img/about/discover.webp new file mode 100644 index 0000000..cb2925a Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/about/discover.webp differ diff --git a/addons/tncsc_deployment/static/src/img/about/join.webp b/addons/tncsc_deployment/static/src/img/about/join.webp new file mode 100644 index 0000000..fbede07 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/about/join.webp differ diff --git a/addons/tncsc_deployment/static/src/img/about/tamil-heritage.webp b/addons/tncsc_deployment/static/src/img/about/tamil-heritage.webp new file mode 100644 index 0000000..bf15c43 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/about/tamil-heritage.webp differ diff --git a/addons/tncsc_deployment/static/src/img/about/unity.webp b/addons/tncsc_deployment/static/src/img/about/unity.webp new file mode 100644 index 0000000..dd0d1e0 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/about/unity.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/amirtha.webp b/addons/tncsc_deployment/static/src/img/board/amirtha.webp new file mode 100644 index 0000000..1918ce1 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/amirtha.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/anand.webp b/addons/tncsc_deployment/static/src/img/board/anand.webp new file mode 100644 index 0000000..faa3fce Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/anand.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/asraph.webp b/addons/tncsc_deployment/static/src/img/board/asraph.webp new file mode 100644 index 0000000..1032259 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/asraph.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/brindha.webp b/addons/tncsc_deployment/static/src/img/board/brindha.webp new file mode 100644 index 0000000..86614bc Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/brindha.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/karuna.webp b/addons/tncsc_deployment/static/src/img/board/karuna.webp new file mode 100644 index 0000000..63a6585 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/karuna.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/mari.webp b/addons/tncsc_deployment/static/src/img/board/mari.webp new file mode 100644 index 0000000..cf3beb8 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/mari.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/murugan.webp b/addons/tncsc_deployment/static/src/img/board/murugan.webp new file mode 100644 index 0000000..49e253c Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/murugan.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/nandhini.webp b/addons/tncsc_deployment/static/src/img/board/nandhini.webp new file mode 100644 index 0000000..9f9390c Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/nandhini.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/palani.webp b/addons/tncsc_deployment/static/src/img/board/palani.webp new file mode 100644 index 0000000..c450c2b Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/palani.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/rachel.webp b/addons/tncsc_deployment/static/src/img/board/rachel.webp new file mode 100644 index 0000000..a7668f5 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/rachel.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/sekar.webp b/addons/tncsc_deployment/static/src/img/board/sekar.webp new file mode 100644 index 0000000..653f5e8 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/sekar.webp differ diff --git a/addons/tncsc_deployment/static/src/img/board/shanmuga.webp b/addons/tncsc_deployment/static/src/img/board/shanmuga.webp new file mode 100644 index 0000000..726e0e6 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/board/shanmuga.webp differ diff --git a/addons/tncsc_deployment/static/src/img/brand/logo.png b/addons/tncsc_deployment/static/src/img/brand/logo.png new file mode 100644 index 0000000..075ace8 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/brand/logo.png differ diff --git a/addons/tncsc_deployment/static/src/img/home/about-01.webp b/addons/tncsc_deployment/static/src/img/home/about-01.webp new file mode 100644 index 0000000..2b7dd7f Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/about-01.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/about-02.webp b/addons/tncsc_deployment/static/src/img/home/about-02.webp new file mode 100644 index 0000000..1df76a6 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/about-02.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/about-03.webp b/addons/tncsc_deployment/static/src/img/home/about-03.webp new file mode 100644 index 0000000..bdefc73 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/about-03.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/about-04.webp b/addons/tncsc_deployment/static/src/img/home/about-04.webp new file mode 100644 index 0000000..2af6c53 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/about-04.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/cultural-events-icon.webp b/addons/tncsc_deployment/static/src/img/home/cultural-events-icon.webp new file mode 100644 index 0000000..31c8c26 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/cultural-events-icon.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/frends-gathering.webp b/addons/tncsc_deployment/static/src/img/home/frends-gathering.webp new file mode 100644 index 0000000..c403d1f Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/frends-gathering.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/hero.webp b/addons/tncsc_deployment/static/src/img/home/hero.webp new file mode 100644 index 0000000..0176c35 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/hero.webp differ diff --git a/addons/tncsc_deployment/static/src/img/home/youth-mentorship.webp b/addons/tncsc_deployment/static/src/img/home/youth-mentorship.webp new file mode 100644 index 0000000..7776b49 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/home/youth-mentorship.webp differ diff --git a/addons/tncsc_deployment/static/src/img/membership/members-img.webp b/addons/tncsc_deployment/static/src/img/membership/members-img.webp new file mode 100644 index 0000000..4d006b2 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/membership/members-img.webp differ diff --git a/addons/tncsc_deployment/static/src/img/membership/membership-benefits.webp b/addons/tncsc_deployment/static/src/img/membership/membership-benefits.webp new file mode 100644 index 0000000..f84afc9 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/membership/membership-benefits.webp differ diff --git a/addons/tncsc_deployment/static/src/img/membership/membership-registration.webp b/addons/tncsc_deployment/static/src/img/membership/membership-registration.webp new file mode 100644 index 0000000..2e8c19a Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/membership/membership-registration.webp differ diff --git a/addons/tncsc_deployment/static/src/img/tamil_class/tamil_class.webp b/addons/tncsc_deployment/static/src/img/tamil_class/tamil_class.webp new file mode 100644 index 0000000..51ac885 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/tamil_class/tamil_class.webp differ diff --git a/addons/tncsc_deployment/static/src/img/tamil_nadu/tamilnadu-1.webp b/addons/tncsc_deployment/static/src/img/tamil_nadu/tamilnadu-1.webp new file mode 100644 index 0000000..c90382d Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/tamil_nadu/tamilnadu-1.webp differ diff --git a/addons/tncsc_deployment/static/src/img/tamil_nadu/tamilnadu-2.webp b/addons/tncsc_deployment/static/src/img/tamil_nadu/tamilnadu-2.webp new file mode 100644 index 0000000..fd267a7 Binary files /dev/null and b/addons/tncsc_deployment/static/src/img/tamil_nadu/tamilnadu-2.webp differ diff --git a/addons/tncsc_deployment/tests/test_tncsc_deployment.py b/addons/tncsc_deployment/tests/test_tncsc_deployment.py index 7ae1894..a6c24d5 100644 --- a/addons/tncsc_deployment/tests/test_tncsc_deployment.py +++ b/addons/tncsc_deployment/tests/test_tncsc_deployment.py @@ -67,7 +67,12 @@ class TestTncscDeployment(TransactionCase): self.assertEqual(tier.product_id.property_account_income_id, dues_account) def test_website_pages_published(self): - for url in ('/', '/about', '/tamil-school', '/sponsors', '/contact'): + urls = ( + '/', '/about', '/about/tamil-nadu', '/about/board-of-directors', + '/membership', '/membership/benefits', '/tamil-school', + '/sponsors', '/contact', + ) + for url in urls: page = self.env['website.page'].search([('url', '=', url)], limit=1) self.assertTrue(page, f"Expected a website.page for {url}") self.assertTrue(page.is_published) diff --git a/addons/tncsc_deployment/views/website_pages.xml b/addons/tncsc_deployment/views/website_pages.xml index a6e2904..7f2f8aa 100644 --- a/addons/tncsc_deployment/views/website_pages.xml +++ b/addons/tncsc_deployment/views/website_pages.xml @@ -1,21 +1,152 @@ + - + TNCSC Home qweb tncsc_deployment.page_home + -
-

Tamil Nadu Cultural Society of Canada

-

Celebrating Tamil language, arts, and culture in Canada.

-

Content to be finalized by TNCSC - this is a placeholder home page - generated by the deployment layer.

- Register for Tamil School - Browse Classifieds +
+
+
+

Connecting Tamil Hearts Across Canada

+

Join Canada's Largest Tamil Nadu Cultural Community

+ Become a Member + Explore Events +
+
+ +
+
+
+
+ Celebrating Cultural Excellence +

About TNCSC

+

Canada's Largest Tamil Cultural Organization — Bridging Heritage & Community Since 1997

+

+ The Tamil Nadu Cultural Society of Canada (TNCSC) has been a cornerstone of the + Tamil community since 1997, connecting generations of Tamil families through + culture, education, and service. As a registered non-profit organization, TNCSC + preserves the rich heritage of Tamil Nadu while fostering a sense of belonging + among Tamil Canadians across provinces. From vibrant Pongal festivals to Tamil + language schools, every initiative is a celebration of identity, resilience, and + community spirit. With programs designed for youth, seniors, newcomers, and + families, TNCSC continues to build a vibrant cultural bridge between Tamil + traditions and Canadian values. +

+ Learn More +
+
+ TNCSC community gathering +
+
+
+
+ +
+
+
+
+ +

Cultural Networking Events

+

Build friendships and professional connections with Tamil families across Canada.

+
+
+ +

Youth & Career Mentorship

+

Programs connecting the next generation with mentors from the Tamil-Canadian community.

+
+
+ +

Festivals & Family Gatherings

+

From Pongal feasts to Deepavali musical nights — celebrating together, every season.

+
+
+
+
+ +
+
+

Speak the Language of Your Heritage

+

+ Tamil classes blending traditional Tamil values with modern teaching methods — + for children ages 4 and up. +

+ Start Learning Today +
+
+ + +
+
+

Upcoming Events

+
+ +
+
+
+
+

+

+ Register +

+
+
+
+
+
+
+ +
+
+

Join Canada's Tamil Cultural Heartbeat

+

Membership is open year-round! Choose from annual, lifetime, or family plans.

+
+ +
+
+
+
+

+

+
+
+
+
+ Join TNCSC Today +
+
@@ -24,6 +155,7 @@ / + True @@ -35,10 +167,55 @@ -
-

About Us

-

Placeholder content - to be filled in with TNCSC's real history, mission, - and board information.

+
+

Celebrating Community, Culture, and Connection Since 1997

+

Tamil Nadu Cultural Society of Canada

+

+ TNCSC is a one and only largest Indian Tamil Organisation in Canada for the + people of Tamilnadu as a whole. +

+

+ Tamil Nadu Cultural Society of Canada (TNCSC) is a Not-for-Profit Ontario + Corporation serving Indian Tamils in Canada. It was established in May 1997 + on an informal basis as an association of like minded Indian Tamils. It was + registered in February 1998 as a not-for-profit corporation in the province + of Ontario to connect Tamil Diasporas of Indian Tamils in Canada. +

+

Preserving Tamil Heritage

+

+ The purpose is to serve Tamils of Indian origin in Canada and preserve and + promote the heritage of our culture in Canada by celebrating festivals like + Pongal combined with Christmas and English New Year, Tamil New Year and + Deepavali combined with Eid. This will facilitate the people of Tamil Nadu + from different religion to feel Canada as a home away from home. We also help + Tamil kids of Indo-Canadian Tamils to understand our rich heritage and the + culture. Association is also assisting the new immigrants from Tamilnadu to + settle down fast in Canada by providing necessary information relating to + Canadian society, settlement, job search and community support by means of + networking. +

+
+
+
+ Tamil Nadu +
+

Tamil Nadu

+

The land whose heritage and language TNCSC exists to celebrate.

+ Discover Tamil Nadu +
+
+
+
+
+ Board of Directors +
+

Board of Directors

+

Meet the volunteers leading TNCSC.

+ Meet the Board +
+
+
+
@@ -50,7 +227,203 @@ True - + + + TNCSC Tamil Nadu + qweb + tncsc_deployment.page_tamil_nadu + + + +
+

தமிழ்நாடு / Tamil Nadu

+

+ தமிழ்நாடு — தமிழர்களின் ஆன்மாவும் அடையாளமும்! இது ஆயிரக்கணக்கான ஆண்டுகள் + பழமை வாய்ந்த வரலாற்றைக் கொண்ட நிலம். +

+ Tamil Nadu coastline +

+ Tamil Nadu is the land of the Tamils, and it has a history that dates back + several thousand years. It is an enchanting and ancient Dravidian land in the + extreme south of peninsular India, where traditions and culture blend and + continue to live in harmony — from its temples and sculptures to its living + classical language. +

+

+ The state's coastline runs nearly 1,000 km along the Coromandel Coast and the + Bay of Bengal, dotted with coconut palms, fishing villages, and rich maritime + wildlife. It is this land — its language, its coast, its temples, and its + people — that TNCSC exists to keep alive for Tamil families across Canada. +

+ Tamil Nadu heritage + Back to About +
+
+
+
+
+ + /about/tamil-nadu + + True + + + + + TNCSC Board of Directors + qweb + tncsc_deployment.page_board + + + +
+

Board of Directors

+

The volunteers currently leading TNCSC.

+ +
+ +
+ +
+

+

+
+
+ Back to About +
+
+
+
+
+ + /about/board-of-directors + + True + + + + + TNCSC Membership + qweb + tncsc_deployment.page_membership + + + +
+

Membership

+

+ For over 28+ years, TNCSC has been a pillar for Tamil families across + Canada — preserving language, celebrating tradition, and uniting generations + through community events and cultural programs. +

+
+
+
+ Membership benefits +
+

Membership Benefits

+

Festivals, networking, Tamil school priority, and more.

+ See Benefits +
+
+
+
+
+ Become a member +
+

Become a Member

+

Online sign-up is launching soon — for now, contact us to get started.

+ Contact Us to Join +
+
+
+
+

Membership Plans

+
+ +
+
+
+
+

+

+

+
+
+
+
+

Already a member? Manage your membership.

+
+
+
+
+
+ + /membership + + True + + + + + TNCSC Membership Benefits + qweb + tncsc_deployment.page_membership_benefits + + + +
+

Membership Benefits

+

TNCSC Memberships

+

Join Hands to Keep Our Tamil Heritage Alive — Right Here in Canada!

+

+ Becoming a member of Tamil Nadu Cultural Society of Canada (TNCSC) is more + than just signing up — it's becoming part of a family that celebrates Tamil + identity, language, and culture in every heartbeat. +

+
+
+
    +
  • Experience the joy of celebrating Tamil festivals like Pongal, Tamil New Year, and Deepavali just the way we do back home.
  • +
  • Meet new friends, families, and professionals who share your values and heritage.
  • +
  • Our community events bring together people from all walks of life — from entrepreneurs to IT professionals to artists.
  • +
  • Members' children get priority access to our Muthamizh Padasaalai, where they learn Tamil reading, writing, and speaking.
  • +
  • Every member is welcome to participate as a volunteer in TNCSC events.
  • +
  • Enjoy free or discounted entry to select TNCSC programs, workshops, and cultural events.
  • +
  • Voting rights and board election participation privileges.
  • +
  • Your membership keeps Tamil culture alive — your involvement keeps our community strong.
  • +
+
+
+ TNCSC members +
+
+ Become a Member +
+
+
+
+
+ + /membership/benefits + + True + + + TNCSC Tamil School qweb @@ -58,11 +431,29 @@ -
-

Tamil School

-

Weekend Tamil language classes for children and youth. See current terms, - levels, and class schedules below.

- Register +
+

Tamil Class

+

முத்தமிழ் பாடசாலை

+
+
+

+ தமிழ்மொழி, தமிழ்க் கலாச்சாரம், தமிழ் மரபு — the Tamil language, culture, + and heritage form the identity and foundation of our community. +

+

+ Operating since 2013, our Tamil classes serve children ages 4 and older, + building speaking, reading, and writing skills through a curriculum based + on Tamil Nadu's own education system, taught from custom textbooks + developed for accessibility abroad. Our teachers are experienced educators + from Tamil Nadu who bring language, history, culture, and tradition into + every class. +

+ Register +
+
+ Tamil class +
+
@@ -74,7 +465,10 @@ True - + TNCSC Sponsors qweb @@ -105,10 +499,51 @@ -
+

Contact Us

-

Email:

-

Placeholder content - add a real address, phone number, and contact form.

+

We'd Love to Hear From You

+
+ +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ +