{"id":15515975,"url":"https://github.com/sawyerh/highlights","last_synced_at":"2025-05-16T10:03:25.253Z","repository":{"id":2344585,"uuid":"45928875","full_name":"sawyerh/highlights","owner":"sawyerh","description":"Code for converting, importing, processing, and displaying Kindle, Instapaper, and Safari Books highlights","archived":false,"fork":false,"pushed_at":"2025-05-05T18:56:06.000Z","size":31608,"stargazers_count":211,"open_issues_count":12,"forks_count":13,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-05T19:54:55.159Z","etag":null,"topics":["aws","ebooks","firebase","firebase-firestore","firebase-functions","firestore","highlight","ibooks","instapaper","kindle-highlights","lambda","nextjs","vercel"],"latest_commit_sha":null,"homepage":"http://highlights.sawyerh.com","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/sawyerh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"sawyerh"}},"created_at":"2015-11-10T17:36:03.000Z","updated_at":"2025-02-10T18:29:56.000Z","dependencies_parsed_at":"2023-07-16T23:17:17.674Z","dependency_job_id":"caf9cc11-6b7c-483f-a4ee-96c8cf484d93","html_url":"https://github.com/sawyerh/highlights","commit_stats":{"total_commits":360,"total_committers":5,"mean_commits":72.0,"dds":0.5527777777777778,"last_synced_commit":"cc079b0a7816b0d1ac611e20a82cde18f8a1f9aa"},"previous_names":["sawyerh/highlight-utils"],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sawyerh%2Fhighlights","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sawyerh%2Fhighlights/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sawyerh%2Fhighlights/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sawyerh%2Fhighlights/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sawyerh","download_url":"https://codeload.github.com/sawyerh/highlights/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254509472,"owners_count":22082890,"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","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":["aws","ebooks","firebase","firebase-firestore","firebase-functions","firestore","highlight","ibooks","instapaper","kindle-highlights","lambda","nextjs","vercel"],"created_at":"2024-10-02T10:05:12.524Z","updated_at":"2025-05-16T10:03:23.762Z","avatar_url":"https://github.com/sawyerh.png","language":"TypeScript","funding_links":["https://github.com/sponsors/sawyerh"],"categories":["TypeScript"],"sub_categories":[],"readme":"## Overview\n\nHello 👋 You're at the root of a monorepo.\n\nThis repo contains all of the code for my personal reading highlight system. You can read more about this project in [this blog post](https://sawyerh.medium.com/how-i-export-process-and-resurface-my-kindle-highlights-addc9de9af1a).\n\n## Directory Structure\n\n```\n├── aws       # Email importer and AI/LLM features\n├── firebase  # Database and backend\n├── packages  # Reading export converters\n│   ├── highlights-email-to-json\n│   ├── kindle-clippings-to-json\n│   ├── kindle-email-to-json\n│   └── safari-books-csv-to-json\n└── web       # Frontend\n```\n\n## Installation\n\n### Pre-requisites\n\n- Node.js 18+\n- Python 3.10+\n- [poetry](https://python-poetry.org/docs/#installation)\n\n### Setup top-level dependencies\n\nTo setup developer tooling, like linting and formatting:\n\n```\nmake init\n```\n\nThen, each individual directory has its own README with setup instructions.\n\n## System context\n\n```mermaid\nC4Context\n  Person(me, \"Me\")\n\n  Boundary(aws, \"AWS\") {\n    System(ai, \"Search \u0026 Summarization\", \"S3, Lambda\")\n    System(email, \"Email importer\", \"SES, S3, Lambda\")\n  }\n\n  Boundary(vercel, \"Vercel\") {\n    System(web, \"Web app\", \"Next.js\")\n  }\n\n  Boundary(google, \"Firebase\") {\n    SystemDb(db, \"Database\", \"Firestore\")\n    System(functions, \"Data enricher\", \"Cloud Functions\")\n    System(api, \"API\", \"Cloud Functions\")\n  }\n\n  System(ga, \"Google Analytics\")\n\n  Rel(me, email, \"Emails export\")\n  Rel(email, db, \"Creates records\")\n  Rel(api, db, \"Reads\")\n  Rel(web, api, \"Get volumes and highlights\")\n  Rel(web, ai, \"Search\")\n  Rel(web, ga, \"Track\")\n  BiRel(db, functions, \"Triggers updates\")\n  UpdateRelStyle(db, functions, $offsetX=\"-45\", $offsetY=\"-20\")\n\n  UpdateLayoutConfig($c4ShapeInRow=\"4\", $c4BoundaryInRow=\"4\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsawyerh%2Fhighlights","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsawyerh%2Fhighlights","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsawyerh%2Fhighlights/lists"}