{"id":19558459,"url":"https://github.com/brew/fruitynutters","last_synced_at":"2026-05-15T06:37:06.141Z","repository":{"id":56559096,"uuid":"55237329","full_name":"brew/fruitynutters","owner":"brew","description":"A food cooperative website","archived":false,"fork":false,"pushed_at":"2023-07-22T10:59:57.000Z","size":636,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-26T08:18:58.684Z","etag":null,"topics":["coop","django","shop"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/brew.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":"2016-04-01T14:13:24.000Z","updated_at":"2023-07-22T11:00:02.000Z","dependencies_parsed_at":"2024-11-11T04:47:17.847Z","dependency_job_id":"93e7001e-2857-4276-b9a2-76f346564c03","html_url":"https://github.com/brew/fruitynutters","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brew/fruitynutters","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brew%2Ffruitynutters","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brew%2Ffruitynutters/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brew%2Ffruitynutters/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brew%2Ffruitynutters/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brew","download_url":"https://codeload.github.com/brew/fruitynutters/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brew%2Ffruitynutters/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285382190,"owners_count":27162159,"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-11-20T02:00:05.334Z","response_time":54,"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":["coop","django","shop"],"created_at":"2024-11-11T04:47:12.005Z","updated_at":"2025-11-20T06:04:35.057Z","avatar_url":"https://github.com/brew.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fruity Nutters food cooperative\n\nThis is an old, old project, running on the Django framework (started in 2008 just as Django version 1.0 was released!), so it's quite crusty. But it handles each member's food order, and makes it marginally easier for the sterling team of volunteers to collate and submit the massive collective order that results.\n\nI've updated it to a more recent version of Django, so it's a little easier to maintain, and worked out a few of the most egregious kinks (though I'm sure there are still many horrors within).\n\nSo, if you want to run a food coop in _exactly the same way_ we do, then this is the old, crusty codebase for you!\n\n## Docker\n\nA Dockerfile is provided to build the Django app served by gunicorn. This image can be used for deployment with the provided docker-compose.yml file, which includes a Postgres database and nginx proxy server (which also serves the static images).\n\n### Config\n\nProvide the following config settings, either in an `.env` file, or as environmental variables:\n\n```ini\n# app\nDEBUG=False\nINTERNAL_IPS=(127.0.0.1)\nALLOWED_HOSTS=(.mygreatfoodcoopwebsite.org.uk,localhost)\nDATABASE_URL=postgres://dbuser:secret@db:5432/postgres\nSECRET_KEY='so-secret'\nEMAIL_URL=smtp://myemailuser:myemailpassword@smtp.example.com:587\nDJANGO_ADMINS=Fred Smith:fredsmith@example.com\nORDER_FORM_SEND_EMAIL='mailbot@example.com'\nORDER_FORM_REPLY_TO_EMAIL='friendly_volunteer@example.com'\nGANALYTICS_TRACKING_CODE='U-XXXXX-ETC'\n\n# db\nPOSTGRES_PASSWORD=secret\nPOSTGRES_USER=dbuser\nPOSTGRES_DB=postgres\n```\n\n#### Basic Authentication\n\nThe whole website uses basic authentication. Add a .htpasswd file to `/nginx`.\n\n### The database\n\nThe docker-compose file defines a Postgres database service. Its data directory is mapped to the host filesystem, relative to the docker-compose file at `./volumes/db`.\n\n### Static assets and media\n\nThe Django app's static assets and media files are also mapped to directories in the host filesystem: `./volumes/static` and `./volumes/media`. These are mounted into the Django app and Nginx services. Static assets are generated during startup by the Django app service using `collectstatic`. Nginx will service these static assets directly.\n\n### Production\n\nEnsure there's `.env.prod` file set out as above.\n\nRun:\n\n```sh\ndocker-compose -f docker-compose.prod.yml --env-file ./.env.prod up --build -d\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrew%2Ffruitynutters","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrew%2Ffruitynutters","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrew%2Ffruitynutters/lists"}