{"id":18006349,"url":"https://github.com/lukakerr/hackd","last_synced_at":"2025-03-26T12:30:26.772Z","repository":{"id":40329696,"uuid":"120044902","full_name":"lukakerr/hackd","owner":"lukakerr","description":"A modern Hacker News iOS application, built with React Native","archived":false,"fork":false,"pushed_at":"2019-01-26T01:08:48.000Z","size":400,"stargazers_count":93,"open_issues_count":2,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2023-02-26T09:11:17.431Z","etag":null,"topics":["api","hacker-news","ios","iphone","javascript","react-native"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukakerr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-03T00:11:40.000Z","updated_at":"2023-02-03T09:20:22.000Z","dependencies_parsed_at":"2022-08-18T00:55:46.252Z","dependency_job_id":null,"html_url":"https://github.com/lukakerr/hackd","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukakerr%2Fhackd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukakerr%2Fhackd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukakerr%2Fhackd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukakerr%2Fhackd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukakerr","download_url":"https://codeload.github.com/lukakerr/hackd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222144723,"owners_count":16938456,"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":["api","hacker-news","ios","iphone","javascript","react-native"],"created_at":"2024-10-30T01:08:04.179Z","updated_at":"2024-10-30T01:08:04.788Z","avatar_url":"https://github.com/lukakerr.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# hackd\n\nA Hacker News React Native powered iOS application. Built to learn React Native and Redux.\n\nCurrently a work in progress.\n\n### Features\n\nFeatures that aren't checked below are yet to be implemented. If you want to implement them, please create a pull request!\n\n##### Main\n\n- [x] Browse anonymously or login\n- [x] 6 feeds to choose from:\n\t- Top\n\t- New\n\t- Best\n\t- Ask\n\t- Show\n\t- Jobs\n- The user can:\n\t- [x] Share posts\n\t- [ ] Search, filter and view posts (stories, show, ask), comments, polls and users\n\t- [x] Read articles in app with Safari View Controller\n\t- [x] Read, collapse and expand comments\n- If logged in, the user can also:\n\t- [x] Upvote posts\n\t- [x] Upvote comments\n\t- [x] Unvote comments\n\t- [ ] Comment\n\t- [ ] Submit a post\n\t- [x] Save a post\n\t- [ ] Add a post to their offline reading section\n\t- [ ] View their recently viewed articles\n\t- [ ] View their upvoted posts\n\t- [x] View their own profile\n- [x] Users can login/logout of multiple different accounts without losing their saved/upvoted/offline/viewed posts\n\n##### Other\n\n- [x] Haptic feedback for common actions\n- [x] 3D touch actions and preview (peek and pop)\u003csup\u003e\u003ca href=\"#1\"\u003e1\u003c/a\u003e\u003c/sup\u003e\n- [x] Themable app colors (i.e. comments, navigation, buttons, tabbar)\n- [x] Swipe horizontally to upvote or save\n- [x] Infinite scroll\n\n### TODO\n\n- [ ] Add features not implemented above\n- [x] Fix and improve comment fetching. \n\t- Comments are fetched recursively due to Hacker News's API design, then flattened into an array where each reply is the next item in the array. This isn't a good solution beacuse the user has to wait for all the comments to be loaded before they can see any (`Promise.all()`).\n\t- To fix this, each top comment and its replies should be fetched individually, appended to an array and the component will re render with the new comment added. The user will also be able to view comments almost immediately while others load.\n- [ ] Add caching for comments (older than 10 minutes), and posts. If post/comment requested again, check if in cache, if so load from cache.\n\n### Run Locally\n\n```bash\n# Clone hackd\n$ git clone https://github.com/lukakerr/hackd.git\n\n# Change directories\n$ cd hackd\n\n# Install dependencies\n$ npm install\n\n# Link native libraries\n$ npm run link\n\n# Run the app\n$ npm run start\n# Or for iPhone X\n$ npm run start:x\n```\n\n### Test\n\nJest is used for testing. To test, run:\n\n```bash\n$ npm run test\n```\n\n### Design\n\nInspired by [Apollo App](https://apolloapp.io), I tried to design hackd around an iOS centric theme.\n\nThe comments design in hackd is based off a stripped down version of Apollo's comments.\n\nHackd also supports font scaling for readers who want smaller or larger text.\n\nI've tried to add and support as many native API's as possible such as haptic feedback and 3D touch. Although many new API's aren't available in the React Native environment yet. \n\n### Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://i.imgur.com/h7b8sfc.png\" width=\"275\" alt=\"hackd1\"\u003e\n  \u003cimg src=\"https://i.imgur.com/w0WAiUJ.png\" width=\"275\" alt=\"hackd2\"\u003e\n  \u003cimg src=\"https://i.imgur.com/ktXZzcT.png\" width=\"275\" alt=\"hackd3\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://i.imgur.com/A7CXz6f.png\" width=\"275\" alt=\"hackd4\"\u003e\n  \u003cimg src=\"https://i.imgur.com/np0pc3S.png\" width=\"275\" alt=\"hackd5\"\u003e\n  \u003cimg src=\"https://i.imgur.com/w1ZSiOR.png\" width=\"275\" alt=\"hackd6\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://i.imgur.com/peOz8Ix.png\" width=\"275\" alt=\"hackd7\"\u003e\n  \u003cimg src=\"https://i.imgur.com/MciVZK1.png\" width=\"275\" alt=\"hackd8\"\u003e\n  \u003cimg src=\"https://i.imgur.com/PbuheBP.png\" width=\"275\" alt=\"hackd9\"\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\u003cbr\u003e\n\n\u003csup id=\"1\"\u003e1\u003c/sup\u003e 3D touch is only available on supported devices. Currently only Wix's [react-native-navigation](https://github.com/wix/react-native-navigation) supports it, although there is a [relatively major bug](https://github.com/wix/react-native-navigation/issues/2445) that hasn't been fixed yet. This bug is present in Hackd.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukakerr%2Fhackd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukakerr%2Fhackd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukakerr%2Fhackd/lists"}