{"id":18783982,"url":"https://github.com/sparkpost/analyticstakehometest","last_synced_at":"2026-02-13T22:03:02.569Z","repository":{"id":138516220,"uuid":"189428979","full_name":"SparkPost/AnalyticsTakeHomeTest","owner":"SparkPost","description":"A place to showcase your abilities","archived":false,"fork":false,"pushed_at":"2019-07-12T19:28:47.000Z","size":15,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-21T08:48:50.157Z","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/SparkPost.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":"2019-05-30T14:32:16.000Z","updated_at":"2019-07-16T23:20:18.000Z","dependencies_parsed_at":"2023-07-14T04:30:38.471Z","dependency_job_id":null,"html_url":"https://github.com/SparkPost/AnalyticsTakeHomeTest","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SparkPost/AnalyticsTakeHomeTest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkPost%2FAnalyticsTakeHomeTest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkPost%2FAnalyticsTakeHomeTest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkPost%2FAnalyticsTakeHomeTest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkPost%2FAnalyticsTakeHomeTest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SparkPost","download_url":"https://codeload.github.com/SparkPost/AnalyticsTakeHomeTest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkPost%2FAnalyticsTakeHomeTest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276375773,"owners_count":25631316,"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","status":"online","status_checked_at":"2025-09-22T02:00:08.972Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-07T20:41:29.771Z","updated_at":"2025-09-22T09:06:50.704Z","avatar_url":"https://github.com/SparkPost.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Analytics Take Home Test\n\nThe purpose of this test is to show off your ability to solve an interesting problem using Node.js. There are no 'correct' or 'incorrect' answers, and a complete solution is not expected; we will also be looking at how you choose to approach a problem and the tradeoffs you decide to make. Go through the problem and identify any potential issues you see. Set aside about 3 hours and put together as much of the solution as you can, focusing on having something useful to your users.\n\n# Problem statement\n\nTake a look at the trigram kata from Dave Thomas http://codekata.com/kata/kata14-tom-swift-under-the-milkwood/\n\nCreate a Node.js service that wraps a solution to the above problem in an command line interface. Your service should expose a upload command that takes a .txt file. You should be able to list any files that you have uploaded, as well as get information about the file (file size, number of trigrams). You should also be able to generate trigrams from the files.\n\nHere's an example interface using a `trigram.js` file:\n* `node trigram upload` -\u003e uploads a new file\n* `node trigram files` -\u003e returns list of files that have been uploaded   \n* node trigram file id=\u003cid\u003e -\u003e returns info about a single file\n* node trigram generate file=\u003cfile-id\u003e maxSize=\u003csize\u003e seedWords=\u003cwords\u003e \u003e returns generated text based on the contents of a given file\n\n## Required Technologies:\n* Node.js\n* Git\n\n## Recommended (optional) technologies:\nTypescript\nPostgres  \n\n# Stretch Goals\n\nIf you finish that, try one of these stretch goals:\n\n## Calculate Number of Trigrams Per file\nHave the `file id=\u003cid\u003e` command return the number of unique trigrams in the file.\n\n## Write an express app with the following routes:\n```\nPOST /upload\nGET /texts -\u003e returns list of texts that have been uploaded\nGET /texts/:id -\u003e returns info about the text\nGET /texts/:id/generate?maxSize\u0026seedWords -\u003e returns generated text\n```\n\n## Write Tests\nAdd linting, style checks, unit, and/or integration tests\n\n## Optimize\nMake it bigger faster stronger!\n\n# Submission\nCreate a Github repo and respond to this email with a link to it. Gitlab or BitBucket repos are also fine, but please use git for version control.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsparkpost%2Fanalyticstakehometest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsparkpost%2Fanalyticstakehometest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsparkpost%2Fanalyticstakehometest/lists"}