{"id":17007366,"url":"https://github.com/leoelicos/txtly","last_synced_at":"2026-04-10T07:43:43.499Z","repository":{"id":41398862,"uuid":"509346856","full_name":"leoelicos/txtly","owner":"leoelicos","description":"Offline text editor","archived":false,"fork":false,"pushed_at":"2023-04-18T11:50:36.000Z","size":120,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T11:48:27.512Z","etag":null,"topics":["idb","pwa","webpack"],"latest_commit_sha":null,"homepage":"https://txtly.herokuapp.com/","language":"JavaScript","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/leoelicos.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}},"created_at":"2022-07-01T06:35:55.000Z","updated_at":"2023-04-07T17:51:53.000Z","dependencies_parsed_at":"2025-03-22T11:46:38.832Z","dependency_job_id":"8d4d303b-67ad-4045-b499-e08da836684d","html_url":"https://github.com/leoelicos/txtly","commit_stats":null,"previous_names":["leoelicos/txtly"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/leoelicos/txtly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leoelicos%2Ftxtly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leoelicos%2Ftxtly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leoelicos%2Ftxtly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leoelicos%2Ftxtly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leoelicos","download_url":"https://codeload.github.com/leoelicos/txtly/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leoelicos%2Ftxtly/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266041749,"owners_count":23867946,"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":["idb","pwa","webpack"],"created_at":"2024-10-14T05:25:32.174Z","updated_at":"2026-04-10T07:43:38.476Z","avatar_url":"https://github.com/leoelicos.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# txtly\n\n![idb](https://img.shields.io/badge/7.0.2-0?label=idb\u0026style=for-the-badge\u0026labelColor=white\u0026color=black) ![webpack](https://img.shields.io/badge/5.73.0-0?label=webpack\u0026style=for-the-badge\u0026labelColor=white\u0026color=black) ![workbox-webpack-plugin](https://img.shields.io/badge/6.5.3-0?label=workbox-webpack-plugin\u0026style=for-the-badge\u0026labelColor=white\u0026color=black) ![codemirror](https://img.shields.io/badge/1.0.0-0?label=code-mirror-themes\u0026style=for-the-badge\u0026labelColor=white\u0026color=black)\n\n![babel-loader](https://img.shields.io/badge/8.2.5-0?label=babel-loader\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![css-loader](https://img.shields.io/badge/6.7.1-0?label=css-loader\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![style-loader](https://img.shields.io/badge/3.3.1-0?label=style-loader\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![webpack-cli](https://img.shields.io/badge/4.10.0-0?label=webpack-cli\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![webpack-dev-server](https://img.shields.io/badge/4.9.3-0?label=webpack-dev-server\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![webpack-pwa-manifest](https://img.shields.io/badge/4.3.0-0?label=webpack-pwa-manifest\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![concurrently](https://img.shields.io/badge/7.2.2-0?label=concurrently\u0026style=flat-square\u0026labelColor=gray\u0026color=black) ![nodemon](https://img.shields.io/badge/2.0.18-0?label=nodemon\u0026style=flat-square\u0026labelColor=gray\u0026color=black)\n\n## Introduction\n\nThis progressive web app allows users to edit a text file using CodeMirror, which prettifies code such as Javascript. The app allows data to persist whether the user is online or offline, and implements an assets cache to store data.\n\nThis Node application uses npm packages `idb` and `code-mirror-themes`.\n\nI made this app in order to learn how to implement an IndexedDB to store persistent data, and also to learn how to make a progressive web app that implements caching strategies like Cache-First using service workers.\n\n## Usage\n\n- The app is deployed at https://txtly.herokuapp.com/\n- The repo is at https://github.com/leoelicos/txtly\n\n## Development and Testing\n\n### 0. Download Node\n\n| Programs | Download links                  |\n| -------- | ------------------------------- |\n| `Node`   | https://nodejs.org/en/download/ |\n\n### 1. Git clone and go inside\n\n```sh\ngit clone https://github.com/leoelicos/txtly.git\n\ncd txtly\n```\n\n### 2. Install dependencies\n\n```sh\n\nnpm install\ncd server \u0026\u0026 npm install\ncd ..\n\n```\n\n## Usage\n\n1. Start the server: `npm start`\n\n2. Access the app by going to http://localhost:3000\n\n## Video Demo\n\nhttps://user-images.githubusercontent.com/99461390/176977890-28eec4aa-222b-4319-aae7-37f28dc6d862.mp4\n\nVideo is also available on [YouTube](https://www.youtube.com/watch?v=nz5ANwI0pWI)\n\n## Screenshots\n\n### The application's `manifest.json` file:\n\n![a manifest file in the browser.](https://user-images.githubusercontent.com/99461390/176977908-5300be5d-5871-4583-872d-6eb61f796122.jpg)\n\n### The application's registered service worker:\n\n![registered service worker in the browser.](https://user-images.githubusercontent.com/99461390/176977917-fcb42a99-12f7-43d6-985d-ef31d07d6f15.jpg)\n\n### The application's IndexedDB storage:\n\n![IndexedDB storage named 'txtly' in the browser.](https://user-images.githubusercontent.com/99461390/176977919-715ef991-2743-4c50-8f03-4c23c364b8a4.png)\n\n## Credits\n\n- BCS Resources\n\n## License\n\n\u0026copy; Leo Wong \u003cleoelicos@gmail.com\u003e\n\nLicensed under the [MIT License](./LICENSE).\n\n```\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleoelicos%2Ftxtly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleoelicos%2Ftxtly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleoelicos%2Ftxtly/lists"}