{"id":15473450,"url":"https://github.com/oonid/intelligence","last_synced_at":"2026-05-18T04:15:57.700Z","repository":{"id":211303991,"uuid":"704438128","full_name":"oonid/intelligence","owner":"oonid","description":"Web app built with Django that interacts with the Basecamp API.","archived":false,"fork":false,"pushed_at":"2025-06-09T08:00:14.000Z","size":191,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T05:44:50.932Z","etag":null,"topics":["basecamp","django","django-rest-framework"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oonid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-13T09:00:01.000Z","updated_at":"2025-06-09T08:00:12.000Z","dependencies_parsed_at":"2024-01-08T11:12:48.665Z","dependency_job_id":"db8abfec-d86b-4e19-bc39-b6b866d2822c","html_url":"https://github.com/oonid/intelligence","commit_stats":{"total_commits":118,"total_committers":2,"mean_commits":59.0,"dds":0.008474576271186418,"last_synced_commit":"42ed8617bee03f9cc3d87771af3cc07cb249838b"},"previous_names":["oonid/intelligence"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oonid/intelligence","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oonid%2Fintelligence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oonid%2Fintelligence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oonid%2Fintelligence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oonid%2Fintelligence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oonid","download_url":"https://codeload.github.com/oonid/intelligence/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oonid%2Fintelligence/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33164688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"online","status_checked_at":"2026-05-18T02:00:06.436Z","response_time":71,"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":["basecamp","django","django-rest-framework"],"created_at":"2024-10-02T02:53:22.608Z","updated_at":"2026-05-18T04:15:57.684Z","avatar_url":"https://github.com/oonid.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# intelligence\n\n![coverage](https://raw.githubusercontent.com/oonid/intelligence/master/coverage_badge.svg?sanitize=true)\n\nA brief exploration of a web app built with [Django](https://www.djangoproject.com/) that interacts with the [Basecamp API](https://github.com/basecamp/bc3-api).\n\nObjectives:\n* Implement OAuth to allow users to log in easily and obtain an access token, which is then saved in cookie-based sessions.\n* Create a form input for user input in API calls.\n* Implement webhooks.\n\n## Development\n\nInstead of manually running the Django web server with `manage.py runserver`, I have created a `docker-compose.yml` file.\nThis allows you to easily run the project with the following command:\n\n```bash\ndocker-compose up\n```\n\nThe `docker-compose` command will build the `basecamp_app` using the `docker build` process,\nwith configurations defined in the `Dockerfile`.\n\nIf you need to access `django-admin` or `manage.py` commands, make sure to navigate to the `basecamp_app` directory\nbefore using them.\n\nTo add a new Django app named `bc`, use the `django-admin` command:\n```shell\ncd basecamp_app\ndjango-admin startapp bc\n```\nTo apply model changes, utilize the `manage.py` script:\n```shell\ncd basecamp_app\npython manage.py migrate\n```\n\n### Structure\n\nThe Django project is located inside the `basecamp_app` directory and is named `intelligence`.\n\nI have placed the virtual environment within the `basecamp_app` directory, specifically in the `venv` subdirectory.\nThe packages that need to be installed using `pip` are listed in the `requirements.txt` file.\nYou can easily install them by running the following command from within your virtual environment:\n\n```bash\npip install -r requirements.txt\n```\n\n### Packages\n\n* `Django`: A web framework designed for perfectionists with deadlines.\n* `djangorestframework`: Used to build APIs on top of Django.\n* `gunicorn`: A Python web server (WSGI) often paired with nginx.\n* `requests`: An HTTP client used to facilitate the OAuth process.\n* `coverage`: A tool used for measuring code coverage, assessing the effectiveness of tests.\n\n### Files\n\nSample of `.env.dev`:\n```\nDEBUG=1\nSECRET_KEY=\"s*cret\"\nDJANGO_ALLOWED_HOSTS=\"localhost 127.0.0.1 [::1]\"\nDJANGO_ALLOW_ASYNC_UNSAFE=\"true\"\n```\n\n### Settings\n\n#### Sessions\n\nThe session engine in settings.py has been changed from the default database-backed to \n[cookie-based](https://docs.djangoproject.com/en/dev/topics/http/sessions/#using-cookie-based-sessions) sessions.\nWe opted for the cookie-based approach as it is more convenient during the early development phase when the database \nmight not be in use yet.\n\n#### Cache\n\nEven though it is not explicitly mentioned in settings.py, we have chosen to utilize the default cache setting,\nemploying a [local-memory cache](https://docs.djangoproject.com/en/dev/topics/cache/#local-memory-caching) backend. \nWe will use the cache as the transfer medium for tokens between the web app and API, as we only need it temporarily \n(and, in many cases, it is not recommended).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foonid%2Fintelligence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foonid%2Fintelligence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foonid%2Fintelligence/lists"}