Public website for OpenSyria, a public data commons for reliable Syrian datasets, API access, and civic intelligence.
The website is intentionally small: a localized landing page, dataset catalog and detail pages, FAQ content, SEO metadata, breadcrumb navigation and structured data, social images, contributor attribution, theme and language controls, and links into the public API documentation and GitHub organization.
| URL | Purpose |
|---|---|
| https://opensyria.org | Public website |
| https://opensyria.org/datasets | Dataset catalog |
| https://opensyria.org/datasets/geography | Geography dataset page |
| https://opensyria.org/datasets/universities | Universities dataset page |
| https://opensyria.org/datasets/transport | Transport dataset page |
| https://api.opensyria.org/docs | API documentation |
| https://github.com/Open-Syria | GitHub organization |
The site publishes public, read-only discovery metadata for agents:
/llms.txtand/index.mddescribe the project and link to the main public resources./auth.mdexplains that public website and dataset API access does not require registration, OAuth, API keys, or credentials./.well-known/api-cataloglinks to the public API documentation, OpenAPI description, health endpoint, and dataset pages./.well-known/agent-skills/index.jsonlists the available OpenSyria agent skills.- OAuth/OIDC and MCP well-known routes return explicit
404 application/problem+jsonresponses until OpenSyria offers protected auth flows or a public MCP server. Both/.well-known/mcp/server-card.jsonand the scanner-compatible plural alias/.well-known/mcp/server-cards.jsonuse that unsupported response.
- Next.js 16 App Router with Cache Components enabled
- React 19
- next-intl with
localePrefix: "as-needed" - shadcn Base UI components
- Tailwind CSS 4
- Biome for formatting and linting
- pnpm 11 with supply-chain protections
src/app/[locale]/ Localized app routes and metadata
src/components/ Website UI components
src/components/ui/ shadcn/Base UI primitives
src/i18n/ next-intl routing, navigation, and request config
src/lib/ Site config and GitHub data helpers
messages/ English and Arabic translations
public/ Public static assets
scripts/ Reproducible asset generation scripts
deploy/website/ Server runtime files copied during deployment
docs/ Contributor and operational documentation
Requirements:
- Node.js 24+
- pnpm 11+
Install dependencies:
corepack enable pnpm
pnpm installStart the development server:
pnpm devOpen:
http://localhost:3000
Application source code lives under src/.
Copy .env.example when local environment values are needed:
cp .env.example .env.local| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_SITE_URL |
Local only | Canonical site URL for local testing |
NEXT_PUBLIC_DATASETS_API_URL |
Local only | API origin for future website/API integration |
NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID |
Optional | Google tag or Tag Manager ID for analytics-enabled deployments |
The Google tag ID is public by design. Use a real Google tag ID, such as GT-WPDWW3NR, or Tag Manager container ID, such as GTM-ABC1234.
The site supports English and Arabic.
- English is the default locale and renders at
/. - Arabic renders at
/ar. - Locale prefixes use next-intl
as-neededrouting. - The HTML
dirattribute and Base UIDirectionProviderare both driven fromsrc/i18n/routing.ts.
Translations live in messages/en.json and messages/ar.json.
Open Graph and Twitter preview metadata explicitly reference the root social images:
/opengraph-image.png/twitter-image.png
Keep these images aligned with the current OpenSyria logo and visual theme so crawlers do not fall back to contributor avatars or other page images. When replacing the image content, bump the brand asset version in src/lib/site.ts so social crawlers request the refreshed URLs.
Regenerate social preview assets after brand changes:
pnpm images:brandAnalytics is loaded through the locale layout with the official Google tag or
Google Tag Manager snippets. NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID accepts either
a Google tag ID such as GT-..., G-..., AW-..., or DC-..., or a Tag
Manager container ID such as GTM-....
Tracked CTA events use:
event=cta_click
cta_id=docs
cta_id=github_stars
The implementation keeps the landing page server-rendered and uses small client boundaries for tracked links and interactive FAQ controls.
Run all CI checks:
pnpm verifyFocused commands:
pnpm check
pnpm typecheck
pnpm buildApply Biome formatting and safe fixes:
pnpm check:writeMaintainers deploy the website through protected automation. Operational deployment details live in docs/deployment.md.
- Contributing
- Code of Conduct
- Security Policy
- Support
- Changelog
- Pull Request Workflow
- Supply Chain Security
- Deployment
- Releases
The website is public for transparency, auditability, and reuse, but broad implementation work is maintainer-led.
Good public contributions here include documentation corrections, broken links, accessibility fixes, reproducible website bugs, deployment/tooling fixes, and maintainer-requested changes.
Dataset corrections belong in the relevant dataset repository.
Website code is licensed under MIT. See LICENSE.