Sanatana
Sanātana Dharma, often translated as the “eternal way,” is not merely a religion but a timeless framework guiding human life toward harmony with cosmic truth. Rooted in Vedic wisdom, it emphasizes universal principles—Dharma (righteous duty), Karma (action and consequence), Moksha (liberation), and the pursuit of truth.
Install / Use
/learn @vulchivijay/SanatanaREADME
License Agreement
Proprietary Rights
All content, source code, designs, images, and assets within this repository are the exclusive property of the repository owner.
Restrictions
You are NOT permitted to:
- Copy, clone, fork, or redistribute any part of this repository.
- Reuse, modify, or adapt any code, assets, or materials for personal or commercial purposes.
- Misuse or exploit any content in any form.
Usage
Access to this repository is provided for viewing purposes only. Any unauthorized use, reproduction, or distribution is strictly prohibited and may result in legal action.
Permissions
If you wish to use any part of this repository, you must obtain explicit written permission from the owner.
© 2025 Repository Owner. All rights reserved.
Legal Penalties
Unauthorized use, copying, redistribution, or misuse of any content in this repository constitutes a violation of intellectual property rights. Violators may be subject to:
- Civil liability, including compensatory and punitive damages.
- Criminal prosecution under applicable laws.
- Payment of all legal costs incurred by the repository owner in enforcing these rights.
By accessing this repository, you agree to comply with these terms. Failure to do so may result in immediate legal action.
Contact Information
For inquiries, permissions, or to report misuse of this repository, please contact: Email: vulchi.vijay@gmail.com
Build notes
-
Baseline browser mapping warning:
- If you see the message:
run the following to update the dev dependency locally (safe and recommended):[baseline-browser-mapping] The data in this module is over two months old. To ensure accurate Baseline data, please update: `npm i baseline-browser-mapping@latest -D`npm i baseline-browser-mapping@latest -D npm run build
- If you see the message:
-
Static export vs server build (
NEXT_STATIC_EXPORT):- This repository can be built either as a server-capable Next app (API routes and middleware available) or as a static export (HTML-only) used for static hosts. The build mode is controlled by the environment variable
NEXT_STATIC_EXPORT. - When
NEXT_STATIC_EXPORT=truethe build setsoutput: 'export'which disables API routes and middleware. If you rely on API routes (for analytics/cookies) or middleware, do NOT setNEXT_STATIC_EXPORT=true. - To build as a server-capable app (default), ensure the env var is not set or set it to
falsebefore runningnpm run build:Remove-Item Env:NEXT_STATIC_EXPORT npm run build - In CI, avoid setting
NEXT_STATIC_EXPORT=trueunless you intentionally want a static-only export. If using static export in CI for a static host, document this choice in your pipeline config so other maintainers are aware.
- This repository can be built either as a server-capable Next app (API routes and middleware available) or as a static export (HTML-only) used for static hosts. The build mode is controlled by the environment variable
If you'd like, I can also pin an updated baseline-browser-mapping version in package.json for you to npm install locally. Let me know if you want me to do that.
Locale Data
Locale/translation JSON files are stored in the locales/ folder (e.g. locales/en/, locales/hi/, etc.) and are read directly at build time via dynamic imports. No API route or remote download step is needed.
Dynamic JSON Content
This project also serves structured content (pages, lists, items) as JSON under public/data/locales/{locale}/.... To support dynamic, nested routes we use runtime fetch to load those JSON files on the server (App Router pages) rather than importing JSON at build time.
Key points:
-
Helpers:
lib/getContentPath.tsbuilds the public URL for a given locale and segment array.lib/fetchContent.tsperforms the runtimefetchand implements a simple fallback (try{segments}.jsonthen{segments}/index.json). -
Do NOT import JSON files directly. Always fetch at runtime using the Fetch API so the same code works in dev, build, and static export modes.
-
Server fetch pattern (used in page.tsx):
- Build segments, e.g.
['vedas','atharvaveda','book1','hymn']→ usegetContentPath(locale, segments) const res = await fetch(path, { cache: 'force-cache' })- If
res.okparse JSON and render; else try folderindex.json; if still missing callnotFound().
- Build segments, e.g.
-
Routes: use a catch-all route (
app/<section>/[...segments]/page.tsx) to handle arbitrary depths.params.segmentsis an array of the path components (e.g.['atharvaveda','book1','hymn']). -
Locale handling: detect server locale via
detectServerLocaleFromHeaders(headers())for server pages. Client components should useuseLocale()to access the active locale when needed, but do not rely on it for server content fetches. -
Fallback UI: use
useLocaleSection()only for UI fallback strings (labels, headings), not for main content data. -
Safe rendering: always use optional chaining and fallbacks (e.g.
data?.title ?? 'Untitled') and avoid assumptions about structure to prevent runtime crashes. -
Performance: use
fetch(..., { cache: 'force-cache' })to let Next/edge/runtime cache responses; thefetchContenthelper already uses this.
Example content path:
/data/locales/en/vedas/atharvaveda/book1/hymn.json
If you want directory listing behavior, add an index.json inside the folder (e.g. /data/locales/en/vedas/atharvaveda/book1/index.json) containing an items array.
Files added/modified for this feature:
lib/getContentPath.ts— builds content URLlib/fetchContent.ts— runtime fetch + index fallbackapp/vedas/page.tsxandapp/vedas/[...segments]/page.tsx— example implementation- similar catch-all pages added for:
vedic-philosophy,puranas,upanishads,itihasa
Troubleshooting:
- If pages return 404, confirm a matching JSON exists under
public/data/locales/{locale}/...or add anindex.jsonfor folders. - For locale mismatches, ensure cookies or request headers include
sanatana_dharma_languageor thatdetectServerLocaleFromHeaderscan resolve the expected locale.
Critical CSS — Home
This project includes a small critical CSS flow to inline only the most important styles for the Home page to reduce render-blocking requests and lower CLS.
- Generated file:
public/critical-home.css(inlined byapp/page.tsxwhen present). - Generation script:
npm run generate:critical:home(also run automatically duringprebuild). - Preferred workflow: install the
tailwindcssCLI in your environment (dev dependency) so the generator produces a Tailwind-derived critical stylesheet. Example:
npm install -D tailwindcss
npm run generate:critical:home
- Fallback: if
tailwindcssCLI is unavailable the generator writes a small handcrafted fallback CSS so builds remain deterministic. To get full Tailwind output ensure the CLI is installed in CI. - Size guidance: keep the inlined critical CSS under ~5–8 KB. The generator will warn if the output exceeds 8 KB.
- Content guidance:
- Inline only critical Home page styles (hero, layout, basic typography, grid).
- Inline dimensions for key images/containers to prevent CLS.
- Inline background + layout, but avoid inline animations.
CI / Render notes:
- Ensure
tailwindcssis available in your CI image (install devDependencies) or run the generator in a step that has the CLI installed. - Cache
public/critical-home.cssor re-run the generator during builds — regenerating is cheap iftailwindcssis present.
If you want, I can add a short CI snippet for Render/GitHub Actions to install tailwindcss and cache public/critical-home.css and node_modules.
Render scheduled deploy
This repository includes a Render configuration (render.yaml) that defines a cron job weekly-deploy which triggers a deploy webhook every Sunday at 08:00 IST (02:30 UTC).
Setup steps on Render:
- Create a Deploy Hook for your
sanatanadharmam.inservice in the Render dashboard (Settings → Deploy Hooks) and copy the hook URL. - In your Render service environment variables, add
RENDER_DEPLOY_HOOKwith the Deploy Hook URL. - Ensure
render.yamlis deployed to the service (it is included in this repo). Render will run the cron job and POST the hook URL at the scheduled time.
If you prefer, I can instead configure the scheduled deploy using Render's UI; the render.yaml approach stores the schedule as code in the repo.
OpenSpec — Usage & Implementation Guide
This repository uses the OpenSpec experimental workflow to propose, implement, and archive changes. The following notes explain how to work with OpenSpec artifacts and the CLI in this project.
-
Quick commands
-
List changes:
openspec list --json -
Create a new change (proposal):
openspec new change "<name>" -
Check change status:
openspec status --change "<name>" --json -
Get apply instructions for implementation:
openspec instructions apply --change "<name>" --json -
Archive a completed change:
openspec archive --change "<name>"
-
-
Propose (artifact creation) guidance
- Use
/opsx:propose <name>or runopenspec new changeto scaffold a change underopenspec/changes/<name>/. - Fill
proposal.md,design.md, andtasks.mdaccording to the schema. Keep proposals concise and include a "Non-goals" section. - For UI or page changes, include localization and testing implications (see Locale checklist below).
- Use
-
Implement (apply) guidance
-
Run
openspec instructions applyto obtain the current tasks and context files. Read the listed context files before implementing. -
Implement tasks in small increments; every completed task should update the
tasks.mdchecklist (- [ ]→- [x]). -
Keep changes minimal and focused to the task. Prefer updating existing
lib/utilities andapp/hooks/over adding new helpers. -
After completing code changes for a task, run:
npm run checkThis runs lint, format, and tests. Fix issue
-
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
342.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
