{
  "markdown": "# GospelChannel — The Church Guide\n\nFind the right church before your first visit.\n\nFree global church guide with worship-aware profiles, built with Next.js 16, OpenNext on Cloudflare Workers, Neon, Spotify, and YouTube.\n\n> Solo-maintained project, and my first open source project. This repository is public so people can report bugs, suggest improvements, and send small focused pull requests. I am still learning the open source side of things, so patience and clarity help a lot.\n\n## Status\n\n- Production site: `https://gospelchannel.com`\n- Contributor language: English or Swedish is fine\n- Project direction is maintainer-led\n\n## What the app does\n\n- Find and compare churches by location, tradition, language, worship style, and service details\n- Browse curated worship and gospel music connected to church profiles\n- Explore church pages with Spotify embeds and YouTube video grids\n- Submit church suggestions and ownership claims\n- Run scheduled content refresh jobs\n- Generate SEO assets such as `sitemap.xml`, `robots.txt`, and structured data\n\n## Stack\n\n- Next.js 16 (App Router)\n- OpenNext + Cloudflare Workers\n- Neon Postgres + Drizzle\n- Better Auth\n- Spotify Web API\n- YouTube Data API\n- Cloudflare R2 for media\n- PostHog for analytics\n\n## Local setup\n\nPrerequisites:\n\n- Node 22.x\n- npm\n\nIf you use `nvm`, run:\n\n```bash\nnvm use\n```\n\nInstall and start:\n\n```bash\npnpm install\ncp .env.example .env.local\npnpm dev\n```\n\nHelpful commands:\n\n```bash\npnpm lint\npnpm build\npnpm smoke\npnpm check:env\n```\n\n## Database (Neon)\n\nThis project uses [Neon](https://neon.tech) serverless Postgres with Drizzle ORM.\n\n1. Create a free project at [neon.tech](https://neon.tech)\n2. Copy the connection strings into `.env.local`:\n   - `DATABASE_URL` - pooled connection string\n   - `DATABASE_URL_UNPOOLED` - direct connection (used by Drizzle migrations)\n3. Run migrations:\n   ```bash\n   npx drizzle-kit push\n   ```\n\n## Environment variables\n\nYou do not need every external integration to read the code or work on docs and UI.\n\nTypical local development:\n\n- `NEXT_PUBLIC_SITE_URL`\n- `NEXT_PUBLIC_MEDIA_BASE_URL`\n- `BETTER_AUTH_URL`\n- `BETTER_AUTH_SECRET`\n- `DATABASE_URL`\n\nNeeded for specific integrations and production-like flows:\n\n- `YOUTUBE_API_KEY`\n- `SPOTIFY_CLIENT_ID`\n- `SPOTIFY_CLIENT_SECRET`\n- `APIFY_TOKEN`\n- `ANTHROPIC_API_KEY`\n- `BREVO_API_KEY`\n- `CRON_SECRET`\n\nAdmin access is database-backed.\nPromote an account to admin with:\n\n```bash\npnpm db:seed -- --emails=you@example.com\n```\n\nNotes:\n\n- `pnpm build` uses offline mode for the content pipeline.\n- Full admin, mail, sync, and deployment flows need real service credentials.\n- Keep secrets in `.env.local`. Do not commit them.\n\n## Contributing\n\nIdeas, bug reports, and small PRs are welcome.\n\nIf you want to help, the easiest path is:\n\n- open an issue\n- keep the idea or fix small\n- explain the problem in plain language\n\nBest ways to help:\n\n- Open an issue for bugs or feature ideas\n- Send focused PRs that solve one problem at a time\n- Include screenshots when changing UI\n- Update docs if behavior changes\n\nSee `CONTRIBUTING.md` for the short version of how this repo is run.\n\n## Security\n\nPlease do not post security issues publicly. See `SECURITY.md`.\n\n## Deployment\n\nThe production app is deployed on Cloudflare Workers via OpenNext.\nContributors usually do not need deployment access.\n\nMaintainer deploy command:\n\n```bash\npnpm deploy\n```\n\n## Project notes\n\n- Spotify can require Extended Quota Mode for some external playlist access.\n- The app has manual data fallbacks in `src/data/manual/` for cases where API data is limited or unavailable.\n\n## License\n\nMIT. See `LICENSE`.\n",
  "bytes": 3642,
  "sha": "d4d971c06d6da335d87a5df4a16da7cd7edd1e6aaa29df8560394b321ab9b3b0",
  "repo_slug": "ac0ai/gospelchannel",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ac0ai_gospelchannel_church_fin_d5230def/readme"
}