{"id":28904791,"url":"https://github.com/0xs1r4t/my-cms","last_synced_at":"2026-04-04T08:40:00.371Z","repository":{"id":298897288,"uuid":"999488499","full_name":"0xs1r4t/my-cms","owner":"0xs1r4t","description":"my personal, customisable, content management system","archived":false,"fork":false,"pushed_at":"2025-06-13T13:43:23.000Z","size":189,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-13T13:52:23.358Z","etag":null,"topics":["fastapi","monorepo","nextjs","postgresql","python","railway","reactjs","sqlalchemy","supabase","tailwindcss","typescript","vercel"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xs1r4t.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-10T10:25:51.000Z","updated_at":"2025-06-13T13:43:27.000Z","dependencies_parsed_at":"2025-06-13T13:52:26.638Z","dependency_job_id":"8f16652c-2c66-4182-962a-7cf08b624bfa","html_url":"https://github.com/0xs1r4t/my-cms","commit_stats":null,"previous_names":["0xs1r4t/my-cms"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/0xs1r4t/my-cms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xs1r4t%2Fmy-cms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xs1r4t%2Fmy-cms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xs1r4t%2Fmy-cms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xs1r4t%2Fmy-cms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xs1r4t","download_url":"https://codeload.github.com/0xs1r4t/my-cms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xs1r4t%2Fmy-cms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261126449,"owners_count":23113312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["fastapi","monorepo","nextjs","postgresql","python","railway","reactjs","sqlalchemy","supabase","tailwindcss","typescript","vercel"],"created_at":"2025-06-21T13:02:23.757Z","updated_at":"2025-12-30T19:57:39.316Z","avatar_url":"https://github.com/0xs1r4t.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# my personal CMS 🍾\r\n\r\ni'm creating a CMS for my digital garden because i don't trust notion anymore 😔\r\n\r\nCMS = Content Management System\r\n\r\n## start the app\r\n\r\n```bash\r\n# python v3.13.4\r\npython -m pip install -r requirements.txt\r\nuvicorn app.main:app --reload --host 0.0.0.0 --port 8000\r\n```\r\n\r\n```powershell\r\n# python v3.13.4\r\npython -m pip install -r requirements.txt\r\nuvicorn app.main:app --reload --host 0.0.0.0 --port 8000\r\n```\r\n\r\n## tech stack\r\n\r\n1. Python FastAPI\r\n2. PostgreSQL\r\n\r\n## services\r\n\r\n1. Railway - website deployment\r\n2. Supabase - db, storage, auth\r\n\r\n## Performance \u0026 Timing Expectations\r\n\r\n### Railway (FastAPI Hosting)\r\n\r\n- Cold start: ~2-3 seconds (first request after inactivity)\r\n- Warm requests: ~50-200ms response time\r\n- Sleep time: Railway doesn't sleep on paid plans ($5+/month)\r\n- Free tier: May sleep after 30 minutes of inactivity\r\n\r\n### Supabase (Database + Storage)\r\n\r\n- Database queries: ~10-50ms (very fast, globally distributed)\r\n- File uploads: ~200ms-2s (depends on file size)\r\n- File downloads: ~100-500ms (CDN cached)\r\n- No cold starts: Always available\r\n\r\n### Real-world Access Times\r\n\r\n```text\r\n📊 Typical API Response Times:\r\n\r\nGET /posts/             → 150-300ms\r\nGET /posts/my-slug      → 100-200ms\r\nPOST /posts/            → 200-400ms\r\nPOST /media/upload      → 1-3s (depending on file size)\r\nGET /media/             → 100-200ms\r\n\r\n🚀 After warm-up (subsequent requests):\r\nAll endpoints          → 50-150ms\r\n```\r\n\r\n### First-time Setup Time\r\n\r\n- Supabase setup: 5 minutes\r\n- Railway deployment: 2-3 minutes\r\n- Domain configuration: 2 minutes\r\n- Total: ~10 minutes to live API\r\n\r\n### Quick Deployment Steps\r\n\r\n1. Set up Supabase (5 min):\r\n\r\n```bash\r\n# Go to supabase.com, create project\r\n# Copy .env values from dashboard\r\n# Run the SQL from supabase_setup.sql\r\n# Create storage bucket (or run setup script)\r\n```\r\n\r\n2.Deploy to Railway (3 min):\r\n\r\n```bash\r\n# Connect GitHub repo to Railway\r\n# Add environment variables\r\n# Deploy automatically triggers\r\n```\r\n\r\n3. Test everything\r\n\r\n```bash\r\nchmod +x scripts/test_api.sh\r\n./scripts/test_api.sh\r\n```\r\n\r\n### Monthly Cost Breakdown\r\n\r\n```text\r\nRailway:         $5-10   (1GB RAM, basic plan)\r\nSupabase:        $0-25   (free → pro when you hit 500MB DB)\r\nDomain:          $10-15  (optional, for content.yourdomain.com)\r\nTotal:           $5-50   (scales with usage)\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xs1r4t%2Fmy-cms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xs1r4t%2Fmy-cms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xs1r4t%2Fmy-cms/lists"}