{"id":50559830,"url":"https://github.com/jonaskahn/rimaimy","last_synced_at":"2026-06-04T11:01:35.407Z","repository":{"id":342746786,"uuid":"1175008289","full_name":"jonaskahn/rimaimy","owner":"jonaskahn","description":"A telegram bot to remind your task based on sent messages with Groq AI and Superbase","archived":false,"fork":false,"pushed_at":"2026-03-07T05:31:11.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-07T13:30:51.339Z","etag":null,"topics":["ai","ai-powered","groq","superbase","telegrambot"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonaskahn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2026-03-07T05:17:15.000Z","updated_at":"2026-03-07T05:31:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jonaskahn/rimaimy","commit_stats":null,"previous_names":["jonaskahn/rimaimy"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jonaskahn/rimaimy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonaskahn%2Frimaimy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonaskahn%2Frimaimy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonaskahn%2Frimaimy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonaskahn%2Frimaimy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonaskahn","download_url":"https://codeload.github.com/jonaskahn/rimaimy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonaskahn%2Frimaimy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33901305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"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":["ai","ai-powered","groq","superbase","telegrambot"],"created_at":"2026-06-04T11:01:34.917Z","updated_at":"2026-06-04T11:01:35.397Z","avatar_url":"https://github.com/jonaskahn.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rimaimy – Telegram Task Bot\n\n\u003e *Rimaimy: pronounced \"remind me\"*\n\nA Telegram bot that extracts tasks from messages using an LLM, stores them in Supabase, and sends reminders based on\nurgency. Runs on Cloudflare Workers.\n\n## Stack\n\n| Service            | Free Tier                         |\n|--------------------|-----------------------------------|\n| Cloudflare Workers | 100,000 requests/day              |\n| Groq               | Free tier (Llama, GPT-OSS models) |\n| Supabase           | 500MB DB, unlimited API           |\n| Telegram Bot API   | Free                              |\n\n## Features\n\n- Multi-user — each Telegram user sees only their own tasks\n- Forward or send any message — the LLM extracts a task title, description, and due date\n- Smart reminders — reminder frequency scales with how close the due date is\n- Inline action buttons on each task: Done, Undone, Due, Delete\n- Link back to the original forwarded message\n- Commands:\n    - List: `/list`, `/list by created`, `/list done`, `/remaining`, `/today`\n    - Create: `/add \u003ctitle\u003e`, `/add \u003ctitle\u003e | \u003cdate\u003e`\n    - Update: `/update \u003cid\u003e due \u003cdate\u003e`, `/update \u003cid\u003e title \u003ctext\u003e`\n    - Delete: `/delete \u003cid\u003e`\n    - Status: `/done \u003cid\u003e`, `/undone \u003cid\u003e`\n- Accepted date formats: `2026-03-10`, `4/3/2026`, `tomorrow`, `today`, `next week`, `in 2 days`\n\n## Setup\n\n### 1. Create a Telegram Bot\n\n1. Open Telegram and message [@BotFather](https://t.me/BotFather)\n2. Send `/newbot` and follow the prompts\n3. Copy the bot token — it looks like `123456789:ABCdef...`\n\n### 2. Create a Supabase Project\n\n1. Go to [supabase.com](https://supabase.com) and create a free project\n2. In **Project Settings → API**, copy:\n    - **Project URL** → this is your `SUPABASE_URL`\n    - **service_role** key → this is your `SUPABASE_SERVICE_KEY` (use the service_role key, not the anon key)\n\n### 3. Create a Groq API Key\n\n1. Go to [console.groq.com](https://console.groq.com) and create a free account\n2. Generate an API key → this is your `GROQ_API_KEY`\n\n### 4. Run the Database Schema\n\nIn Supabase, go to **SQL Editor** and run the contents of `supabase/schema.sql`. This creates the tasks table.\n\n### 5. Configure `wrangler.toml`\n\nCopy the example config and fill in your values:\n\n```bash\ncp wrangler.toml.example wrangler.toml\n```\n\nOpen `wrangler.toml` and replace the placeholder values under `[vars]`:\n\n```toml\n[vars]\nTELEGRAM_BOT_TOKEN = \"your-telegram-bot-token\"\nSUPABASE_URL       = \"https://your-project.supabase.co\"\nSUPABASE_SERVICE_KEY = \"eyJ...\"\nGROQ_API_KEY       = \"gsk_...\"\nGROQ_MODEL         = \"openai/gpt-oss-20b\"   # or openai/gpt-oss-120b for better accuracy\nCRON_SECRET        = \"any-random-string\"    # used to protect the /cron-reminder endpoint\n```\n\n`wrangler.toml` is listed in `.gitignore` and will not be committed.\n\n### 6. Install and Deploy\n\n```bash\nnpm install\nnpm run deploy\n```\n\nAfter deploying, Wrangler will print your worker URL:\n\n```\nhttps://remind-me-bot.\u003cyour-subdomain\u003e.workers.dev\n```\n\n### 7. Register the Telegram Webhook\n\nTell Telegram where to send updates. Replace the values below with your bot token and worker URL:\n\n```bash\ncurl \"https://api.telegram.org/bot\u003cYOUR_BOT_TOKEN\u003e/setWebhook?url=https://remind-me-bot.\u003cyour-subdomain\u003e.workers.dev/webhook\"\n```\n\nA successful response looks like:\n\n```json\n{\"ok\":true,\"result\":true,\"description\":\"Webhook was set\"}\n```\n\n### 8. Set Up Reminders (Cron)\n\nThe cron handler runs at `/cron-reminder?secret=\u003cCRON_SECRET\u003e` and checks all users' tasks.\n\n**Option A: Cloudflare Cron Triggers** (requires Workers Paid plan, $5/month)\n\nThe cron schedule is already set in `wrangler.toml` (`0 * * * *` = every hour). No extra setup needed if you have a paid\nplan.\n\n**Option B: External Cron (free)**\n\nUse [cron-job.org](https://cron-job.org) or any HTTP cron service:\n\n- URL: `https://remind-me-bot.\u003cyour-subdomain\u003e.workers.dev/cron-reminder?secret=\u003cCRON_SECRET\u003e`\n- Method: GET\n- Schedule: every hour (`0 * * * *`)\n\nThe `CRON_SECRET` value must match what you set in `wrangler.toml`.\n\n## Reminder Schedule\n\n| Time until due date    | Reminder frequency |\n|------------------------|--------------------|\n| No due date or overdue | Every hour         |\n| Less than 1 day        | Every hour         |\n| 1–3 days               | Every 4 hours      |\n| 3–5 days               | Every 8 hours      |\n| More than 5 days       | No reminder        |\n\n## Local Development\n\n```bash\ncp .dev.vars.example .dev.vars\n# Fill in .dev.vars with your credentials (same keys as wrangler.toml [vars])\n\nnpm run dev\n```\n\nTo test the Telegram webhook locally, expose your local server with [ngrok](https://ngrok.com) or Cloudflare Tunnel,\nthen register that URL as your webhook.\n\n## Usage\n\n**Create a task**\n\n- Forward or send any message: *\"Call mom tomorrow at 5pm\"*\n- Or use the command: `/add Buy groceries` or `/add Finish report | tomorrow`\n\n**List tasks**\n\n- `/list` — all pending tasks, sorted by due date\n- `/list by created` — sorted by creation date\n- `/list done` — includes completed tasks\n- `/remaining` — incomplete tasks only\n- `/today` — tasks due today\n\n**Manage tasks**\n\n- `/update \u003cid\u003e due tomorrow` or `/update \u003cid\u003e title New title`\n- `/done \u003cid\u003e` / `/undone \u003cid\u003e`\n- `/delete \u003cid\u003e` — permanent, no confirmation\n\n## Multi-User\n\nEach user is identified by their Telegram user ID. All data is scoped per user — tasks, reminders, and commands only\naffect the requesting user's data. No registration required.\n\n## Project Structure\n\n```\nrimaimy/\n├── src/\n│   ├── index.ts        # Webhook + cron handler\n│   ├── llm.ts          # LLM task extraction\n│   ├── db.ts           # Supabase CRUD\n│   ├── telegram.ts     # Telegram API helpers\n│   └── types.ts        # TypeScript types\n├── supabase/\n│   └── schema.sql      # Database schema\n├── wrangler.toml        # Cloudflare config (gitignored, contains secrets)\n├── wrangler.toml.example\n└── package.json\n```\n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonaskahn%2Frimaimy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonaskahn%2Frimaimy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonaskahn%2Frimaimy/lists"}