{"id":50801565,"url":"https://github.com/codebydusk/quotd","last_synced_at":"2026-06-12T20:33:59.463Z","repository":{"id":364166232,"uuid":"1266541600","full_name":"codebydusk/quotd","owner":"codebydusk","description":"Quotes. Horoscopes. Bad advice. Emotional damage.","archived":false,"fork":false,"pushed_at":"2026-06-11T22:38:32.000Z","size":496,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T00:06:51.655Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codebydusk.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-06-11T18:04:25.000Z","updated_at":"2026-06-11T22:38:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/codebydusk/quotd","commit_stats":null,"previous_names":["codebydusk/quotd"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/codebydusk/quotd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebydusk%2Fquotd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebydusk%2Fquotd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebydusk%2Fquotd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebydusk%2Fquotd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codebydusk","download_url":"https://codeload.github.com/codebydusk/quotd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebydusk%2Fquotd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34262155,"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-12T02:00:06.859Z","response_time":109,"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":[],"created_at":"2026-06-12T20:33:54.489Z","updated_at":"2026-06-12T20:33:59.203Z","avatar_url":"https://github.com/codebydusk.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/banner.png\" alt=\"quotd banner\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n# quotd — Quote of the Day\n\n\u003e A widget full of reasons, wisdom, chaos, and emotional damage.\n\nDaily wisdom, questionable wisdom, and everything in between.  \nFrom love letters to sarcastic horoscopes—one widget, endless moods.\n\n---\n\n## About\n\n**quotd** is a minimal Android home screen widget that delivers random quotes, excuses, observations, horoscopes, bad advice, romance, emotional damage, and pure chaos directly to your home screen. The design is intentionally flat—just text on a background, nothing more. Typography first. Humor with personality. Highly shareable content.\n\nNo accounts. No internet. No tracking. Just words.\n\n---\n\n## Features\n\n- **8 quote categories** — No, Chaos, Bad Advice, Emotional Damage, Love, Lust, Horoscope, Funny Insults\n- **Two widget sizes** — 4×1 (compact) and 4×2 (expanded)\n- **Per-widget color customisation** — Each widget instance has its own background and text color\n- **Dynamic emoji augmentation** — Optional keyword-based emoji injection at runtime (toggle per widget)\n- **Tap to copy** — Tap the quote to copy it to your clipboard; widget shows \"Copied!\" for 2 seconds\n- **Refresh button** — Manual refresh on the right side of the widget\n- **Auto-refresh** — Quotes rotate automatically every 1 hour\n- **Offline-first** — All quotes are bundled locally in JSON; no internet required\n- **Flat design** — Two colors. That's it.\n\n### Design Principles\n\n- **Typography First** — The text is the UI\n- **Minimal UI** — No chrome, no clutter\n- **Fast Widgets** — Instant loads, no network calls\n- **Offline First** — Works anywhere, anytime\n- **Humor With Personality** — Every category has its own voice\n- **Highly Shareable** — Tap, copy, send\n\n### Emoji Engine\n\nThe original quote JSON files are **always emoji-free**. Emojis are injected dynamically at runtime by the `KeywordEmojiDecorator` — a keyword-based system that scans quotes for contextually relevant words and sprinkles in emojis that feel natural, not random.\n\n**How it works:**\n- Scans quotes for 200+ keywords (whole-word, case-insensitive)\n- Picks one matching keyword and a relevant emoji\n- Chooses a placement strategy: inline (60%), suffix (25%), or prefix (15%)\n- 20% of the time: no emoji at all — not every quote needs one\n- 20% of the time: adds a second \"reaction\" emoji (😂, 💀, 🤷, etc.)\n\n**Example:**\n\n```\nInput:  \"My calendar laughed when I tried to squeeze this in.\"\nOutput: \"My calendar 📅 laughed when I tried to squeeze this in.\"\n    or: \"📅 My calendar laughed when I tried to squeeze this in.\"\n    or: \"My calendar laughed when I tried to squeeze this in. 😂\"\n```\n\nThe same quote looks slightly different every time. Can be toggled off per widget in the configuration screen. Clipboard copy always gets the original, undecorated text.\n\n---\n\n## Widget Types\n\n| Widget | Size | Description | Status |\n|--------|------|-------------|--------|\n| quotd · No | 4×1 | Creative ways to say no | ✅ Available |\n| quotd · No | 4×2 | Creative ways to say no (expanded) | ✅ Available |\n| quotd · Horoscope | 4×1 | Sarcastic cosmic wisdom | ✅ Available |\n| quotd · Horoscope | 4×2 | Sarcastic cosmic wisdom (expanded) | ✅ Available |\n\n\u003e All 8 categories are available within any widget via the configuration screen. The launcher picker shows No and Horoscope as quick-access presets.\n\n---\n\n## Getting Started\n\n### Adding a Widget\n\n1. Long-press on your home screen\n2. Select **Widgets**\n3. Find **quotd** in the widget list\n4. Choose your preferred size (4×1 or 4×2) and preset (No or Horoscope)\n5. Configure category and colors in the setup screen\n6. Tap **Apply**\n\n### Configuring Colors\n\nWhen placing a widget, a configuration screen appears with:\n- **Category selector** — Pick any of the 8 quote modes\n- **Theme presets** — 8 curated color combinations\n- Live preview of the widget with your chosen theme\n\n### Multiple Widgets\n\nYou can place multiple widgets on the same home screen, each with:\n- A different category (e.g., one \"No\" and one \"Horoscope\")\n- Independent color schemes\n- Separate refresh cycles\n\n---\n\n## Categories\n\n### 🚫 No\nThousands of creative, funny, professional, sarcastic, and absurd reasons to decline anything. From polite deflections to excuses involving time paradoxes and imaginary pets.\n\n*Quotes for this category are provided as-is from the [no-as-a-service](https://github.com/hotheadhacker/no-as-a-service) repository.*\n\n### 🌀 Chaos\nSarcastic observations about life, reality, and the universe. For when you need to feel seen by the void.\n\n### 💀 Bad Advice\nTerrible life advice delivered with complete confidence. Do not follow. (Seriously.)\n\n### 💥 Emotional Damage\nTruths that hurt because they're accurate. Brutal honesty delivered fresh daily.\n\n### 💌 Love\nDeeply romantic quotes for partners and hopeless romantics. The warm side of the pillow.\n\n### 🔥 Lust\nFlirty, intimate, and suggestive thoughts for partners. Handle with care.\n\n### 🔮 Horoscope\nSarcastic cosmic guidance from a universe that is mildly disappointed in humanity.\n\n### 🎯 Funny Insults\nPlayful roasts, sarcastic burns, and harmless emotional violence. Send to friends at your own risk.\n\n---\n\n## Building from Source\n\n### Prerequisites\n\n- Android Studio Ladybug or later\n- JDK 11+\n- Android SDK 36\n\n### Build\n\n```bash\ngit clone https://github.com/codebydusk/quotd.git\ncd quotd\n./gradlew assembleDebug\n```\n\n### Install\n\n```bash\nadb install app/build/outputs/apk/debug/app-debug.apk\n```\n\n---\n\n## Contributing\n\n### Adding Quotes\n\n1. Edit the JSON file in `app/src/main/assets/` for the target category\n2. Each file is a simple JSON array of strings:\n   ```json\n   [\n       \"Your quote here.\",\n       \"Another quote here.\"\n   ]\n   ```\n3. Build and test\n\n### Adding a New Category\n\n1. Create a new JSON file in `app/src/main/assets/`\n2. Add the category mapping in `QuoteRepository.kt`\n3. Add string resources in `strings.xml`\n4. Add the category entry in `QuotdWidgetConfigActivity.kt`\n5. Optionally, create widget info XML files in `res/xml/` and register new receiver subclasses in `AndroidManifest.xml` for a dedicated launcher shortcut\n\n---\n\n## Credits\n\n- Huge thanks to [@danny5395](https://github.com/danny5395) for the original app idea!\n- Quotes for the \"No\" category are provided as-is from the [no-as-a-service](https://github.com/hotheadhacker/no-as-a-service) repository by [@hotheadhacker](https://github.com/hotheadhacker).\n\n---\n\n## Author\n\n**Sayantan Roy** — [@codebydusk](https://github.com/codebydusk)\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0 — see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodebydusk%2Fquotd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodebydusk%2Fquotd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodebydusk%2Fquotd/lists"}