{"id":31049215,"url":"https://github.com/ztkent/sync","last_synced_at":"2025-09-14T21:48:16.583Z","repository":{"id":303804479,"uuid":"998665520","full_name":"ztkent/sync","owner":"ztkent","description":"News Aggregation Platform - Trending Stories and AI Summaries","archived":false,"fork":false,"pushed_at":"2025-07-09T13:28:52.000Z","size":32244,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-14T06:32:14.465Z","etag":null,"topics":["gemini-api","go","news","rss"],"latest_commit_sha":null,"homepage":"","language":"Go","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/ztkent.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-09T03:55:42.000Z","updated_at":"2025-09-01T21:58:18.000Z","dependencies_parsed_at":"2025-07-09T14:53:53.619Z","dependency_job_id":null,"html_url":"https://github.com/ztkent/sync","commit_stats":null,"previous_names":["ztkent/sync"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ztkent/sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ztkent%2Fsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ztkent%2Fsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ztkent%2Fsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ztkent%2Fsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ztkent","download_url":"https://codeload.github.com/ztkent/sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ztkent%2Fsync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275174428,"owners_count":25418064,"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","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["gemini-api","go","news","rss"],"created_at":"2025-09-14T21:48:12.472Z","updated_at":"2025-09-14T21:48:16.574Z","avatar_url":"https://github.com/ztkent.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"web/static/images/logo-dark.png\" alt=\"Sync Logo\" width=\"400\" height=\"150\"\u003e\n  \u003ch1\u003e\u003c/h1\u003e\n  \u003cp\u003eModern Content Aggregation - Trending Stories and AI Summaries\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://syncnews.us\"\u003e🌐 Sync News\u003c/a\u003e • \n    \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e • \n    \u003ca href=\"#api-endpoints\"\u003eAPI\u003c/a\u003e \n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Overview\n\nNews aggregation service that combines RSS feed processing with AI-powered content analysis.  \n\nProvides real-time news updates, smart categorization, and executive summaries across multiple content categories.\n\n## Features\n\n- **Multi-Source RSS Aggregation**: Automated content indexing from 30+ premium news sources including BBC, CNN, Bloomberg, TechCrunch, Reuters, and more\n- **AI-Powered Analysis**: Intelligent content categorization and trending analysis using Google's Gemini AI\n- **Executive Summaries**: Daily AI-generated market insights and breaking news summaries\n- **Smart Categorization**: Automatic classification into Finance, Politics, Technology, and World news\n- **Real-Time Updates**: Background content indexing every 15 minutes\n- **User Management**: Google OAuth authentication with personalized feeds\n- **Responsive Design**: Mobile-first interface with dark/light theme support\n\n## Mobile App\n\n- Native Android app providing fullscreen access to Sync News with optimized mobile experience.  \n- App available for download on [Github](https://github.com/ztkent/sync/releases).\n\n## Architecture\n\n```\nsync/\n├── main.go                   \n├── internal/\n│   ├── content-analyzer/     # AI content analysis and trending detection\n│   ├── content-indexer/      # RSS feed processing and content extraction\n│   ├── database/             # SQLite schema and database operations\n│   ├── models/               # Data structures and models\n│   └── server/               # HTTP handlers and authentication\n├── web/static/               # Frontend assets (CSS, JS, HTML)\n├── data/                     # SQLite database storage\n└── app/                      # Android app source code\n```\n\n## Technology Stack\n\n### Backend\n- **Language**: Golang\n- **Framework**: Chi router with middleware support\n- **Database**: SQLite with optimized indexing\n- **Authentication**: Google OAuth 2.0\n- **AI Integration**: Google Gemini AI via [AI-Util](https://github.com/ztkent/ai-util) package\n\n### Frontend\n- **Framework**: Vanilla JavaScript with HTMX for dynamic content\n- **Styling**: Custom CSS with CSS variables for theming\n- **Mobile**: Responsive design with touch-optimized interactions\n\n## Quick Start\n\n### Prerequisites\n- Go 1.24 or higher\n- Docker and Docker Compose\n- Google Cloud credentials for AI features\n\n### Environment Setup\n\n1. **Clone the repository**:\n```bash\ngit clone https://github.com/ztkent/sync.git\ncd sync\n```\n\n2. **Configure environment variables**:\n```bash\n# Required for AI features and authentication\nexport GOOGLE_CLIENT_ID=\"your_google_client_id\"\nexport GOOGLE_CLIENT_SECRET=\"your_google_client_secret\"\nexport GOOGLE_API_KEY=\"your_google_api_key\"\n```\n\n3. **Build and run with Docker**:\n```bash\nmake app-up\n```\n\n4. **Access the application**:\n- Development: `http://localhost:8080`\n- Production: `https://localhost:8085` (with SSL)\n\n### Database Schema\n\nThe application uses SQLite with the following core tables:\n- `content_items`: Aggregated news articles\n- `users`: User accounts and preferences\n- `user_feeds`: Personalized content feeds\n- `trending_feed`: AI-generated trending content\n- `executive_summaries`: Daily market and news summaries\n\n## API Endpoints\n\n### Public Endpoints\n- `GET /` - Main application interface\n- `GET /api/feed` - Paginated content feed\n- `GET /api/trending` - AI-curated trending stories\n- `GET /api/search` - Content search functionality\n- `GET /api/executive-summary` - Daily executive summary\n\n### Authenticated Endpoints\n- `POST /api/content/{id}/save` - Save article to reading list\n- `POST /api/content/{id}/remove` - Remove saved article\n- `GET /api/user` - User profile information\n\n### Admin Endpoints\n- `GET /api/refresh-trending` - Trigger trending analysis\n- `GET /api/refresh-summary` - Generate executive summary\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fztkent%2Fsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fztkent%2Fsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fztkent%2Fsync/lists"}