{"id":18777028,"url":"https://github.com/39zde/factor","last_synced_at":"2025-09-04T16:41:30.198Z","repository":{"id":261433548,"uuid":"846182615","full_name":"39zde/factor","owner":"39zde","description":"An invoicing application built with TypeScript:React on top of IndexDB packaged with Tauri v2","archived":false,"fork":false,"pushed_at":"2024-09-30T09:46:22.000Z","size":3432,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-29T09:43:31.192Z","etag":null,"topics":["indexed-db","indexeddb","invoice","react","react-table","reactjs","table","tauri","tauri2","typescript","vite","webworker"],"latest_commit_sha":null,"homepage":"https://39zde.github.io/factor/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/39zde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-22T17:30:32.000Z","updated_at":"2024-09-30T09:45:23.000Z","dependencies_parsed_at":"2024-11-06T14:51:08.975Z","dependency_job_id":"b8b4148f-f4c5-4551-8983-0a49c84f2c8f","html_url":"https://github.com/39zde/factor","commit_stats":null,"previous_names":["39zde/factor"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39zde%2Ffactor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39zde%2Ffactor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39zde%2Ffactor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39zde%2Ffactor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/39zde","download_url":"https://codeload.github.com/39zde/factor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239687144,"owners_count":19680666,"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":["indexed-db","indexeddb","invoice","react","react-table","reactjs","table","tauri","tauri2","typescript","vite","webworker"],"created_at":"2024-11-07T20:08:16.647Z","updated_at":"2025-02-19T15:44:05.959Z","avatar_url":"https://github.com/39zde.png","language":"TypeScript","readme":"# Factor\n\n![Logo](./resources/images/social-preview.png)\n\nAn invoicing application built with TypeScript:React on top of IndexDB packaged with Tauri v2[^1]\n\n## Status\nThe most important step is already done, which is the Table Component in in [`./src/comps/Table`](./src/comps/Table).\nThe approach of using IndexedDB is surprisingly performant, better than expected. So why go with IndexedDB?\nWell it is already built into the browser, meaning no added dependencies. It's also quite performant, even with\n - IndexedDB is a NOSQL-type Database[^2], but using referencing to different object stores[^3] (oStores)\n - the awkward async callbacks without using `await`\n\nI have not run any benchmarks yet, but scrolling in a Table with:\n - entries: 4000+ entries\n - scope: 27\n - scrolling speed: 27 per scroll\n - column-count: 12 columns\n - column with of 250px\n - 5 dereferencing operations per row\n - in dev mode (2x the number of hooks are being called)\n - on old hardware\n - small memory profile\n\nworks without problems. WebWorkers[^4] do most of the heavy lifting. Certainly more performant, than using `useLiveQuery` from Dexie.js[^5]. That being said there is much more performance to be gained at various places. Looking at what already is accomplished, this approach looks very promising. With this in mind, if the only goal was performance, React would not be the best choice. To my understanding the purpose of React is to make the development easy and comprehensible, not to archive the best possible performance.\n\nFor now the uploading of data can only be done in csv with semi-colon (;) separated fields with customers as the only upload option. There are still a bunch of things to do (see [roadmap.md](./roadmap.md)), before adding new tables.\n\nNow this app uses Tauri v2, instead of Electron, for better IPC/File-Handling. Also the executable Size decreased darmatically, by using the native WebView used on the system.\nThere are also some major performance gains everywhere, which is really nice to see. Tauri v2 is quite young, so some bugs will be expected, but adopting v2 this early should pay off in the future by not having to migrate from v1.\n\n## Screen Shots\n\nsee [Screenshots Folder](./resources/images/screenshots/SCREENSHOT.md)\n\n## Quick Start\n\nPrerequisites:\n- nmv[^6] or other Node.js[^7] version management tool\n- Node.js[^7] Long Term Support version\n- git[^8]\n- Rust toolchain[^9]\n\n```bash\nnvm install lts\nnvm use lts\ncorepack enable\ngit clone https://github.com/39zde/factor.git\ncd factor\nyarn install\nyarn dev\n```\nsee [`CONTRIBUTING.md`](./CONTRIBUTING.md) for more information\n\n# Links\n [^1]: https://v2.tauri.app/\n [^2]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Basic_Terminology#key_characteristics\n [^3]: https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore\n [^4]: https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker\n [^5]: https://developer.mozilla.org/en-US/docs/Web/API/Worker/Worker\n [^6]: https://github.com/nvm-sh/nvm\n [^7]: https://nodejs.org/\n [^8]: https://git-scm.com/\n [^9]: https://www.rust-lang.org/learn/get-started\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F39zde%2Ffactor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F39zde%2Ffactor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F39zde%2Ffactor/lists"}