{"id":32861835,"url":"https://github.com/v0id-user/projectarabia","last_synced_at":"2026-04-13T13:04:08.965Z","repository":{"id":323218383,"uuid":"1092406266","full_name":"v0id-user/projectarabia","owner":"v0id-user","description":"A tech-focused community for link aggregation and thoughtful discussion. Inspired by Hacker News and Lobsters, but built for the modern web and the Arabic tech scene.","archived":false,"fork":false,"pushed_at":"2025-11-30T01:55:44.000Z","size":413,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-01T14:37:03.334Z","etag":null,"topics":["agplv3","arabic-tech","cloudflare","cloudflare-d1","cloudflare-kv","cloudflare-pages","cloudflare-queues","cloudflare-workers","community-platform","discussion-platform","edge-computing","link-aggregation","open-source-community","react","resend","serverless","sqlite","tanstack-start","typescript","zustand"],"latest_commit_sha":null,"homepage":"https://b11z.news","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/v0id-user.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-08T15:15:22.000Z","updated_at":"2025-11-30T07:27:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/v0id-user/projectarabia","commit_stats":null,"previous_names":["v0id-user/projectarabia"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/v0id-user/projectarabia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v0id-user%2Fprojectarabia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v0id-user%2Fprojectarabia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v0id-user%2Fprojectarabia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v0id-user%2Fprojectarabia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/v0id-user","download_url":"https://codeload.github.com/v0id-user/projectarabia/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v0id-user%2Fprojectarabia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31753553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agplv3","arabic-tech","cloudflare","cloudflare-d1","cloudflare-kv","cloudflare-pages","cloudflare-queues","cloudflare-workers","community-platform","discussion-platform","edge-computing","link-aggregation","open-source-community","react","resend","serverless","sqlite","tanstack-start","typescript","zustand"],"created_at":"2025-11-08T22:00:47.681Z","updated_at":"2026-04-13T13:04:08.959Z","avatar_url":"https://github.com/v0id-user.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project Arabia \n\n\u003e A tech-focused community for link aggregation and thoughtful discussion — inspired by Hacker News and Lobsters, but built for the modern web and the Arabic tech scene.\n\n---\n\n## Overview\n\n**ProjectArabia** is a community platform centered around sharing and discussing links, projects, and ideas.\nIt’s designed for developers, founders, and builders who value depth, curiosity, and simplicity — not noise.\n\nUsers can:\n\n* Submit tech-related articles, posts, or projects.\n* Discuss and vote on links in real-time.\n* Receive clean, non-spammy notifications when someone interacts with their post or comment.\n* Explore trending discussions without algorithms getting in the way.\n\nThink *old-school web communities*, but fast, edge-native, and thoughtfully minimal.\n\n---\n\n## Stack\n\n* **Framework:** [TanStack Start](https://tanstack.com/start) — file-based routing + modern React SSR\n* **State Management:** [Zustand](https://github.com/pmndrs/zustand)\n* **Email Service:** [Resend](https://resend.com) (used for notifications)\n\n---\n\n## Infrastructure\n\nRuns entirely on the **Cloudflare Edge**:\n\n* **Cloudflare Pages \u0026 Workers** – serving both frontend and API from the edge\n* **Cloudflare Queues** – background email dispatch (no user-blocking or spam bursts)\n* **Cloudflare KV** – fast cache for recent posts and sessions\n* **Cloudflare D1 (SQLite)** – persistent relational storage\n\n---\n\n## Architecture Highlights\n\n* **Serverless-first design:** No traditional backend servers — everything lives on Workers.\n* **Real-time consistency:** KV for speed, D1 for truth.\n* **Edge queueing:** Notifications are enqueued and processed asynchronously, respecting rate limits.\n* **Predictable simplicity:** No complex abstractions, no hidden magic.\n\n---\n\n## Vision\n\nProjectArabia aims to become the home for **Arabic-speaking tech minds**,\nwhere ideas spread fast but thoughtfully — without engagement farming or hype.\n\nThe mission is simple:\n\n\u003e Create a calm space where builders share what matters.\n\n---\n\n## Development\n\n```bash\n# clone the repo\ngit clone https://github.com/v0id-user/projectarabia.git\ncd projectarabia\n\n# install dependencies (bun recommended)\nbun install\n\n# start dev server\nbun run dev\n```\n\n---\n\n## Environment Variables\n\nBelow are the environment variables required to run ProjectArabia.  \nCopy these into your `.env` file and set the appropriate values.\n\n```env\nCLOUDFLARE_ACCOUNT_ID=\nCLOUDFLARE_D1_TOKEN=\n\nRESEND_API_KEY=\n\nSECRET_KEY=\nSESSION_SECRET=\n```\n\n- **CLOUDFLARE_ACCOUNT_ID**: Your Cloudflare account ID.\n- **CLOUDFLARE_D1_TOKEN**: API token for D1 database access.\n- **RESEND_API_KEY**: Your Resend (email service provider) API key.\n- **SECRET_KEY**: Used for encryption and signing.\n- **SESSION_SECRET**: Session cookie secret.\n\nAll variables are required for a successful build and deployment.\n\n---\n\n## Deployment\n\n\n### Account setup \u0026 Database setup\n\n#### Production Setup\n\nFor production deployment, follow the [Drizzle ORM Cloudflare D1 documentation](https://orm.drizzle.team/docs/connect-cloudflare-d1) to set up your D1 database and configure the necessary environment variables.\n\nYou'll need to:\n1. Create a D1 database in your Cloudflare dashboard\n2. Set up your `wrangler.jsonc` with the D1 database configuration\n3. Configure the required environment variables (see [Environment Variables](#environment-variables) section)\n\n#### Local Development Setup\n\nFor local development, you need to configure the database path in `drizzle.config.ts`:\n\n1. Start your dev server once: `bun run dev`\n2. Navigate to `.wrangler/state/v3/d1/miniflare-D1DatabaseObject/` directory\n3. Find your database file (it will be a `.sqlite` file with a long hash name)\n4. Copy the full path to that file\n5. Update `drizzle.config.ts` and replace the `url` in the `dbCredentials` object with your database path\n\nExample:\n```typescript\ndbCredentials: {\n  url: \".wrangler/state/v3/d1/miniflare-D1DatabaseObject/YOUR_DATABASE_FILE.sqlite\",\n}\n```\n\n#### Deploy to Production\n\nTo deploy to production:\n\n```bash\n# Set all environment variables from .env file to production environment\nbun wrangler secret bulk .env --env production\n\n# Build the project for production\nbun run build\n\n# Deploy to Cloudflare production environment\nbun run deploy\n```\n\n---\n\n## License \u0026 Credits\n\nAGPL-3.0 License.\nBuilt by [#V0ID](https://v0id.me) — powered by curiosity, caffeine, and the edge.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv0id-user%2Fprojectarabia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fv0id-user%2Fprojectarabia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv0id-user%2Fprojectarabia/lists"}