{"id":20543956,"url":"https://github.com/drewmoore/feature_planning","last_synced_at":"2026-02-27T11:13:42.934Z","repository":{"id":78372109,"uuid":"97484829","full_name":"drewmoore/feature_planning","owner":"drewmoore","description":null,"archived":false,"fork":false,"pushed_at":"2017-07-17T15:24:14.000Z","size":3,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-06T04:46:44.089Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/drewmoore.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":"2017-07-17T14:19:34.000Z","updated_at":"2017-07-17T14:19:34.000Z","dependencies_parsed_at":"2023-04-24T23:17:13.591Z","dependency_job_id":null,"html_url":"https://github.com/drewmoore/feature_planning","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/drewmoore/feature_planning","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewmoore%2Ffeature_planning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewmoore%2Ffeature_planning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewmoore%2Ffeature_planning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewmoore%2Ffeature_planning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drewmoore","download_url":"https://codeload.github.com/drewmoore/feature_planning/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewmoore%2Ffeature_planning/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29892070,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T09:48:51.284Z","status":"ssl_error","status_checked_at":"2026-02-27T09:48:43.992Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-11-16T01:41:34.919Z","updated_at":"2026-02-27T11:13:42.920Z","avatar_url":"https://github.com/drewmoore.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personalized Shopping Suggestions\n\n## What\n- Suggest designs for purchase based on authenticated users' social media activity.\n\n## Why\n- This can lead to a more personalized shopping experience.\n- It can strengthen customers' brand-association.\n- It would be a fun task to implement this feature.\n\n## How\n\n### General Overview\n- Spoonflower's designs have 'tag' data, as can be seen on results from its new API.\n- Twitter posts have 'hashtag' data.\n- There will likely be overlaps between these two sets of tags.\n- Comparing the users' most-used hastags with tags associated with designs would enable the suggestion of new designs.\n\n### Backend Implementation\nAssuming a user has authorized Spoonflower to access Twitter data, and the needed\nTwitter account information is stored on the user's db record:\n- Implement an API endpoint for retrieving suggested designs for a user.\n  - Controller's action will:\n    - Query Twitter for the user's Tweets, let's say 50 most recent for now.\n    - Reduce Twitter API results to a flat array of hashtags featured in those tweets.\n    - Query the designs tags table for records with a tag that is included in the array of hashtags, limit to say, 20 for now.\n    - Query and respond with the designs associated with these tags, using the same response format as the 'search' API endpoint for consistency.\n- Of course, acceptance, integration, and/or unit tests will be needed!\n\n\n### Frontend Implementation\n- On 'Home' view, include a section of page that is a row for suggestions.\n  - This row would be empty for users who have not yet authorized Spoonflower to integrate with Twitter. There could be a button for Twitter and a suggestion for users to integrate.\n- On initial loading of view, the React container for the suggestions would dispatch an asynchronous action to fetch the suggestions from an API endpoint.\n- On receiving the API response, another action would dispatch\n- Test the container's ability to receive and render these results, possibly via Jest.\n\n\n### Technology to Use\n- Twitter API\n- isomorphic fetch\n\n### Personnel\n- Likely a two-person job: one frontend and one backend.\n- If I were working on it, I would likely work on the tasks of designing the React container/component, making and receiving the API request and results, and testing this frontend feature. My reasoning is just that I have less professional experience in this area and therefore wish to build on these skills.\n\n### Tasks:\n  - Frontend (~= 8 hours):\n    - Implement container/component for rendering of suggestions, empty at first.\n    - Implement twitter button that successfully authorizes Spoonflower to interact with user's Twitter account.\n    - Implement sending of user token to server for saving to user record.\n    - Implement container's fetching of results.\n    - Implement reducer's transferring results to app state.\n    - Rendering results\n    - Tests.\n  - Backend (~= 8 hours):\n    - Receive and store Twitter user token for accessing account.\n    - Implement endpoint for suggestions:\n      - Fetch user's Tweets\n      - Reduce tweets to tags\n      - Query design_tags.\n      - Retrieve the designs.\n      - Respond with designs.\n      - Test backend features.\n\n### Potential Challenges\n- Feature efficacy\n  - One likely scenario on initial implementation is that users will have suggestions for designs that they may have already purchased.\n    - This could be smoothed out in planning another feature for the filtering of suggestions.\n    - This would not be entirely inconsistent with other E-Commerce platforms that have similar \"rough edges\" and such challenges.\n  - There may be the possibility of having empty results (user does not use hashtags, or hashtags have no corresponding tags on Spoonflower).\n- Scalability\n  - Querying Twitter for potentially large amounts of data on a user's posts.\n  - Querying through large quantities of designs to match tag data with a user's hashtag-related data from Twitter.\n- Guiding users to integrate with Twitter and give permissions to Spoonflower to access data.\n  - Users will likely not mind sharing data, but they may need to be convinced that they want to make a few extra clicks and possibly log-in to Twitter, as well.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrewmoore%2Ffeature_planning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrewmoore%2Ffeature_planning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrewmoore%2Ffeature_planning/lists"}