{"id":45400893,"url":"https://github.com/jamalsoueidan/streamrecorder","last_synced_at":"2026-05-10T01:30:45.989Z","repository":{"id":329206988,"uuid":"1118559759","full_name":"jamalsoueidan/streamrecorder","owner":"jamalsoueidan","description":"Stream Recording for TikTok, Twitch, Kick, YouTube, AfreecaTV, and Pandalive. Just add your live streams, and they'll be automatically captured and saved for you to watch anytime.","archived":false,"fork":false,"pushed_at":"2026-03-29T18:01:30.000Z","size":4565,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-29T18:02:45.997Z","etag":null,"topics":["anthropic","casl","coolify","headless","hetzner","n8n","nextjs","openai","pwa","react-query","s3","sentry","strapi","umami-analytics","workers"],"latest_commit_sha":null,"homepage":"https://www.livestreamrecorder.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamalsoueidan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-18T00:17:27.000Z","updated_at":"2026-03-29T18:01:34.000Z","dependencies_parsed_at":"2026-03-01T01:07:08.864Z","dependency_job_id":null,"html_url":"https://github.com/jamalsoueidan/streamrecorder","commit_stats":null,"previous_names":["jamalsoueidan/streamrecorder"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/jamalsoueidan/streamrecorder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamalsoueidan%2Fstreamrecorder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamalsoueidan%2Fstreamrecorder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamalsoueidan%2Fstreamrecorder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamalsoueidan%2Fstreamrecorder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamalsoueidan","download_url":"https://codeload.github.com/jamalsoueidan/streamrecorder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamalsoueidan%2Fstreamrecorder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407502,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: 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":["anthropic","casl","coolify","headless","hetzner","n8n","nextjs","openai","pwa","react-query","s3","sentry","strapi","umami-analytics","workers"],"created_at":"2026-02-21T20:13:25.091Z","updated_at":"2026-04-04T17:04:16.032Z","avatar_url":"https://github.com/jamalsoueidan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StreamRecorder\n\n## Architecture\n\n```bash\n┌─────────────────────────────────────────────────────────────────────────────────────┐\n│                                 Internet / Users                                    │\n│                              (Browser accessing app)                                │\n└────────────────────────────────────┬────────────────────────────────────────────────┘\n                                     │\n           ┌─────────────────────────┼─────────────────────────┐\n           │                         │                         │\n   ┌───────▼───────────┐    ┌───────▼───────────┐    ┌────────▼────────┐\n   │     Frontend      │    │     Backend       │    │   S3 Storage    │\n   │     xxxx.com      │    │  strapi.xxx.com   │    │   cdn.xxx.com   │\n   │                   │    │                   │    │                 │\n   │ ┌───────────────┐ │    │ ┌───────────────┐ │    │ ┌─────────────┐ │\n   │ │   Next.js     │◄├────┼─┤    Strapi     │ │    │ │  Recordings │ │\n   │ └───────┬───────┘ │    │ └───────┬───────┘ │    │ │  Thumbnails │ │\n   └─────────┼─────────┘    └─────────┼─────────┘    │ └─────────────┘ │\n             │                        │              └────────▲────────┘\n             │                        │                       │\n             └────────────┬───────────┘                       │\n                          │                                   │\n                 ┌────────▼────────┐                          │\n                 │   PostgreSQL    │                          │\n                 │    Database     │                          │\n                 └─────────────────┘                          │\n                                                              │\n                                                              │ Upload recordings\n                             ┌────────────────┐               │\n                             │ Workflow Queue │               │\n                             │  (Automation)  │               │\n                             └───────┬────────┘               │\n                                     │                        │\n                                     │ Dispatches             │\n                   ┌─────────────────┼─────────────────┐      │\n                   │                 │                 │      │\n          ┌────────▼───────┐ ┌───────▼───────┐ ┌──────▼──────┴┐\n          │   Worker 1     │ │   Worker 2    │ │   Worker N   │\n          │ ┌────────────┐ │ │ ┌───────────┐ │ │ ┌──────────┐ │\n          │ │  TikTok    │ │ │ │  TikTok   │ │ │ │  Twitch  │ │\n          │ │  Recorder  │ │ │ │  Recorder │ │ │ │  Recorder│ │\n          │ └─────┬──────┘ │ │ └─────┬─────┘ │ │ └────┬─────┘ │\n          └───────┼────────┘ └───────┼───────┘ └──────┼───────┘\n                  │                  │                │\n                  └──────────────────┼────────────────┘\n                                     │\n                            ┌────────▼────────┐\n                            │      Redis      │\n                            │    Job Queue    │\n                            └─────────────────┘\n```\n\n## Deployment Environment (Coolify)\n\n1. **PostgreSQL Database** - Data storage\n2. **Strapi Backend** - API server\n3. **Next.js Frontend** - Web server\n\n## Strapi Backend - Setup \u0026 Deployment Guide\n\n### 1. Database Setup (Local)\n\n```bash\n# Connect to PostgreSQL\npsql -U postgres\n\n# Create database\nCREATE DATABASE strapi;\n\\q\n```\n\n### 2. Environment Variables (.env)\n\nCreate `.env` file in `/backend`:\n\n```bash\n# Database\n\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=\nAPI_TOKEN_SALT=\nADMIN_JWT_SECRET=\nTRANSFER_TOKEN_SALT=\nENCRYPTION_KEY=\n\n# Database\nDATABASE_CLIENT=postgres\nDATABASE_HOST=127.0.0.1\nDATABASE_PORT=5432\nDATABASE_NAME=strapi\nDATABASE_USERNAME=postgres\nDATABASE_PASSWORD=\nDATABASE_SSL=false\nDATABASE_FILENAME=\nJWT_SECRET=\n\nAWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nAWS_BUCKET=\nAWS_BUCKET_URL=\nAWS_ENDPOINT=\n\nGITHUB_WEBHOOK_SECRET=\n```\n\n### 3. Start Strapi\n\nDeploy\n\n## Frontend (Next.js) - Setup \u0026 Deployment Guide\n\n### 1. Environment Variables (.env.local)\n\nCreate `.env.local` file in `/frontend`:\n\n```bash\nNEXT_PUBLIC_STRAPI_URL=http://localhost:1337\nNEXT_PUBLIC_S3_URL=https://domain.com/bucket\n```\n\n**Note:** `NEXT_PUBLIC_*` variables are exposed to browser (safe for public URLs).\n\n## GitHub Changelog Setup\n\n1. Generate a secret key and add it to your Strapi `.env` file:\n\n   ```bash\n      GITHUB_WEBHOOK_SECRET=your-secret-here\n   ```\n\n2. Go to your GitHub repo → Settings → Webhooks → Add webhook\n\n3. Configure the webhook:\n\n   - **Payload URL:** `https://your-domain.com/api/change-log/github-webhook`\n   - **Content type:** `application/json`\n   - **Secret:** Same value as `GITHUB_WEBHOOK_SECRET`\n   - **Events:** Select \"Let me select individual events\" → check only **Releases**\n\n4. Click \"Add webhook\"\n\nNow when you publish a release on GitHub, the version and changelog body will automatically be saved to Strapi.\n\nDeploy\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamalsoueidan%2Fstreamrecorder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamalsoueidan%2Fstreamrecorder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamalsoueidan%2Fstreamrecorder/lists"}