{"id":46456448,"url":"https://github.com/nikosalonen/domain-pollenator","last_synced_at":"2026-03-06T01:58:56.784Z","repository":{"id":329744185,"uuid":"1120524853","full_name":"nikosalonen/domain-pollenator","owner":"nikosalonen","description":"A serverless microservice that monitors domain expiration dates and sends email notifications when domains actually expire. Built with AWS CDK and designed to stay within AWS free tier limits.","archived":false,"fork":false,"pushed_at":"2025-12-21T14:43:50.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-23T04:44:38.479Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/nikosalonen.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-21T12:06:03.000Z","updated_at":"2025-12-21T14:43:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nikosalonen/domain-pollenator","commit_stats":null,"previous_names":["nikosalonen/domain-pollenator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nikosalonen/domain-pollenator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosalonen%2Fdomain-pollenator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosalonen%2Fdomain-pollenator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosalonen%2Fdomain-pollenator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosalonen%2Fdomain-pollenator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikosalonen","download_url":"https://codeload.github.com/nikosalonen/domain-pollenator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosalonen%2Fdomain-pollenator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30158602,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","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":[],"created_at":"2026-03-06T01:58:56.217Z","updated_at":"2026-03-06T01:58:56.773Z","avatar_url":"https://github.com/nikosalonen.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Domain Pollenator\n\nA serverless microservice that monitors domain expiration dates and sends email notifications when domains actually expire. Built with AWS CDK and designed to stay within AWS free tier limits.\n\n## Architecture\n\n- **DynamoDB**: Stores domain information (name, expiration date, status)\n- **Lambda Functions**: \n  - Scheduler: Runs daily to determine which domains need checking\n  - Domain Checker: Queries RDAP API to get expiration dates\n  - Notification Sender: Sends email alerts via SES\n- **EventBridge**: Daily cron trigger (midnight UTC)\n- **SES**: Email notifications\n\n## Prerequisites\n\n- Node.js 18+ and npm\n- AWS CLI configured with appropriate credentials\n- AWS CDK CLI: `npm install -g aws-cdk`\n- SES email address verified in AWS Console\n\n## Setup\n\n1. Install dependencies:\n```bash\nnpm install\n```\n\n2. Set your notification email (optional, defaults to `your-email@example.com`):\n```bash\nexport NOTIFICATION_EMAIL=your-email@example.com\n```\n\n   Optionally set the sender email address (defaults to `noreply@domain-pollenator.com`):\n```bash\nexport SENDER_EMAIL=noreply@yourdomain.com\n```\n\n3. Bootstrap CDK (first time only):\n```bash\ncdk bootstrap\n```\n\n4. Deploy the stack:\n```bash\nnpm run deploy\n```\n\n## Adding Domains\n\nAfter deployment, add domains to the DynamoDB table. You can use the AWS Console or CLI:\n\n```bash\naws dynamodb put-item \\\n  --table-name \u003cDomainsTableName\u003e \\\n  --item '{\"domainName\": {\"S\": \"example.com\"}}'\n```\n\nThe scheduler will automatically check domains right after their expiration date. Domains are scheduled to be checked 1 day after their expiration date to verify if they have actually expired.\n\n## SES Configuration\n\nBefore the service can send emails, you must:\n\n1. Verify your notification email address in SES Console (the recipient)\n2. Verify your sender email address in SES Console (defaults to `noreply@domain-pollenator.com`, or set via `SENDER_EMAIL`)\n3. If in SES Sandbox, verify both sender and recipient emails\n4. Request production access if needed (for sending to unverified emails)\n\n## Free Tier Considerations\n\nThis service is designed to stay within AWS free tier:\n- DynamoDB: 25 GB storage, 25 read/write units (sufficient for \u003c50 domains)\n- Lambda: 1M requests/month, 400K GB-seconds\n- EventBridge: 1M custom events/month\n- SES: 62,000 emails/month\n- CloudWatch Logs: 5 GB ingestion, 5 GB storage\n\n## Useful Commands\n\n- `npm run build` - Compile TypeScript\n- `npm run watch` - Watch for changes and compile\n- `npm run cdk synth` - Synthesize CloudFormation template\n- `npm run cdk deploy` - Deploy stack to AWS\n- `npm run cdk diff` - Compare deployed stack with current state\n- `cdk destroy` - Destroy the stack\n\n## Troubleshooting\n\n- Check CloudWatch Logs for Lambda execution logs\n- Verify SES email is verified in AWS Console\n- Ensure DynamoDB table exists and has correct permissions\n- Check EventBridge rule is enabled and scheduled correctly\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikosalonen%2Fdomain-pollenator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikosalonen%2Fdomain-pollenator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikosalonen%2Fdomain-pollenator/lists"}