{"id":21977571,"url":"https://github.com/jrodriguezn19/heyurl","last_synced_at":"2026-05-08T06:50:04.055Z","repository":{"id":255639389,"uuid":"628825345","full_name":"jrodriguezn19/HeyUrl","owner":"jrodriguezn19","description":"Url Shortener","archived":false,"fork":false,"pushed_at":"2023-04-17T04:04:42.000Z","size":41,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-17T11:08:57.710Z","etag":null,"topics":["bootstrap","django","python"],"latest_commit_sha":null,"homepage":"","language":"Python","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/jrodriguezn19.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":"2023-04-17T04:00:51.000Z","updated_at":"2023-04-17T04:04:47.000Z","dependencies_parsed_at":"2024-09-06T13:05:13.922Z","dependency_job_id":null,"html_url":"https://github.com/jrodriguezn19/HeyUrl","commit_stats":null,"previous_names":["jrodriguezn19/heyurl"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jrodriguezn19/HeyUrl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrodriguezn19%2FHeyUrl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrodriguezn19%2FHeyUrl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrodriguezn19%2FHeyUrl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrodriguezn19%2FHeyUrl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jrodriguezn19","download_url":"https://codeload.github.com/jrodriguezn19/HeyUrl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jrodriguezn19%2FHeyUrl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260346877,"owners_count":22995151,"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":["bootstrap","django","python"],"created_at":"2024-11-29T16:15:45.517Z","updated_at":"2025-10-07T13:02:40.638Z","avatar_url":"https://github.com/jrodriguezn19.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HeyURL! Code Challenge (Django)\n\nThis repository has been created as a code challenge for candidates with\nFullStack Labs. The candidate will clone and setup an existing Django\napplication. The application will contain routes, migrations, models, and\nminimal views but with no actual functionality created. The candidate will show\nall her/his expertise building apps with the Django framework and problem\nsolving skills.\n\n## Overview\n\nHeyURL! is a service to create awesome friendly URLs to make it easier for\npeople to remember. Our team developed some mockup views but don't have our\nawesome functionality in place yet.\n\n## Requirements\n\n- Implement actions to create shorter URLs based on a given full URL\n- If URL is not valid, the application returns an error message to the user\n- We want to be able to provide click metrics to our users for each URL in the\nsystem. Every time that someone clicks a short URL, it should record that click\nand also user platform and browser using the user agent request header\n- We want to create a metrics panel for the user to view the stats for every\nshort URL. The user should be able to see total clicks per day on the current\nmonth along with a breakdown of browsers and platforms\n- If someone tries to visit a invalid short URL then it should return a custom\n404 page\n- Unit Tests should be created which cover the code that is added as applicable\n\n### Short URL Format\n\n- Max length 5 character e.g. `NELNT`\n- Allows upper and lower case characters\n- Allows numbers\n- Any non letter or number characters are not allowed, including whitespace\n- `original_url` and `short_url` must be unique\n- Original URL format should be validated\n\n## Getting Started\n\n1. Ensure your environment is setup to run Python3 and you have Django installed\n2. Clone this repository\n3. Install dependencies listed in `requirements.txt`\n4. Run database migrations\n5. Load default data\n6. Run development server\n\n## Notes\n\n### Pages\n\nThe following pages have already been created with general boiler-plate to get\nyou started:\n\n- `GET /` This page lists the current URLs in the system along with a form to\ncreate a new URL\n- `POST /store` Skeleton in place to accept the posting of the create URL form\n- `GET /u/\u003cshort_url\u003e` Skeleton in place to track a click event of a short URL\n\n### User Agent Package\n\nUse the `django-user-agents` (https://github.com/selwin/django-user_agents)\npackage, which has been pulled in for you, to pull in the visiting user's\nbrowser and user agent for saving when invoking the click method of a shortened\nURL.\n\n## Bonus\n\nAs an additional requirement if you run through all of the above, the HeyURL!\napp requires an API endpoint to retrieve the ten (10) latest URLs submitted. It\nshould be a JSON API compliant endpoint. Here is an example of what the response\nshould look like:\n\n```json\n{\n  \"data\": [\n    {\n      \"type\": \"urls\",\n      \"id\": \"1\",\n      \"attributes\": {\n        \"created-at\": \"2018-08-15T02:48:08.642Z\",\n        \"original-url\": \"http://www.fullstacklabs.com\",\n        \"url\": \"https://app-domain/a\",\n        \"clicks\": 1000000\n      },\n      \"relationships\": {\n        \"metrics\": {\n          \"data\": [\n            {\n              \"id\": 1,\n              \"type\": \"metrics\"\n            }\n          ]\n        }\n      }\n    }\n  ],\n  \"included\": []\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjrodriguezn19%2Fheyurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjrodriguezn19%2Fheyurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjrodriguezn19%2Fheyurl/lists"}