{"id":21831946,"url":"https://github.com/michaeltoohig/bilolok","last_synced_at":"2026-03-16T06:12:23.780Z","repository":{"id":55071893,"uuid":"422128613","full_name":"michaeltoohig/bilolok","owner":"michaeltoohig","description":"A full-stack (FastAPI/Vue.js) Foursquare-like app for kava bars in Port Vila, Vanuatu","archived":false,"fork":false,"pushed_at":"2024-06-27T04:56:07.000Z","size":5038,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-25T18:58:20.761Z","etag":null,"topics":["fastapi","kava","pwa","python","vanuatu","vue"],"latest_commit_sha":null,"homepage":"https://bilolok.com","language":"Vue","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/michaeltoohig.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-28T08:41:04.000Z","updated_at":"2022-10-06T22:02:27.000Z","dependencies_parsed_at":"2024-06-17T06:49:03.681Z","dependency_job_id":"00fdd680-2179-4885-a2b5-d5b9806f53e0","html_url":"https://github.com/michaeltoohig/bilolok","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michaeltoohig/bilolok","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaeltoohig%2Fbilolok","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaeltoohig%2Fbilolok/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaeltoohig%2Fbilolok/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaeltoohig%2Fbilolok/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaeltoohig","download_url":"https://codeload.github.com/michaeltoohig/bilolok/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaeltoohig%2Fbilolok/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30570334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-16T06:02:37.763Z","status":"ssl_error","status_checked_at":"2026-03-16T06:02:14.913Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["fastapi","kava","pwa","python","vanuatu","vue"],"created_at":"2024-11-27T19:16:59.886Z","updated_at":"2026-03-16T06:12:23.743Z","avatar_url":"https://github.com/michaeltoohig.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bilolok\n\nBilolok means `Kava` in the local language of a small village on the east, south-east side of Malekula island in Vanuatu.\n\nBilolok is an open-source application that allows users to browse the hundreds of kava bars in Vanuatu, but focused on Port Vila.\nIt takes inspiration from Foursquare and is built with FastAPI and Vue.js along with some supporting services such as Tus and Uppy for resumable uploads and Thumbor for image serving.\n\n## Features\n\n- User profiles and user favorites and `chief` titles (like Foursquare mayor).\n- Support for check-ins, videos, images and GPS guided navigation to kava bars.\n- Kava bar filters, heatmap for popularity, basic search functionality.\n- Offline support from PWA's service worker and custom map tile caching.\n\n## Development\n\nThe project requires a top-level environment variable file first so copy the template to begin.\n\n```sh\ncp .env.template .env\nnano .env\n```\n\nModify the values within for your usecase/preferences.\nMost values are sensible defaults but a few you will need to provide such as your own vapid key values for push notifications and the MailJet API keys for sending messages. \n\nRunning the code for development currently requires three steps, but it could be a single `docker-compose up` if my local environment within WSL would play nicely with docker and code reloading was working.\nSo given my personal environment issue I opted for the following.\n\n```sh\n# in first tmux window\ndocker-compose up\n# in second tmux window\n./export-env.sh\nexport POSTGRES_SERVER=localhost REDIS_SERVER=localhost\ncd backend/app/\npoetry shell\n./start-reload.sh\n# in third tmux window\ncd frontend\nyarn run dev\n```\n\nSome of the complexity above comes from the fact my initial design comes from inspiration from Tiangolo's FastAPI and Postgres starter but after awhile I got fed up with its use of docker as the dev environment and slow rebuilds between code changes so I took the frontend and backend services out of docker.\nAs a benefit the code base is still docker ready for when I may go back to a full docker environment, one line dev environment start-up and all.\n\n### DB Migrations\n\nMake changes to or add a new model file to the `backend/app/app/models` directory.\nIf you are adding a new file then import the new models to the `backend/app/app/db/base.py` file so that it can be found by Alembic, and also make our models compatible with `sqlalchemy-continuum` package for easy history tables.\nLastly, run the migration commands.\n\n```sh\nalembic migration --autogenerate -m \"Your migrtation message\"\nalembic upgrade head\n```\n\n#### OpenGraph Tags\n\nCurrently OG tags are a sticking point of my frontend implementation.\nSince the frontend Vue.js application is a SPA it means crawlers do not see customized OG tags prior to the app's JavaScript files loading, which crawlers generally ignore anyways.\nSo each page that users may share would have the same default OG tags which I see as a negative.\nFacebook is a main source of potential users so I am catering to their crawler which has some quirks.\n\nAgain, cralwers do not load JavaScript so they do not see the dynamic OG tags provided by `vue-meta` so I may remove it altogether but for now it exists and contributes to one of three locations that OG tags are defined.\n\n- frontend/public/index.html\n- frontend/public/facebook/index.html\n- frontend/src/views/*.vue\n\nTo make things worse, Facebook, will not work on https and requires a special nginx check if the incoming request is a facebook bot so we redirect it to a static file available to them via http.\n\nLastly, the current solution is Nginx detects known bots and forwards them to our OG tag service found in `backend/app/app/og_app` which provides dynamic OG tags based on the URL so when users share our links the social media platforms have the individualized OG tags.\n\n## Contributing\n\nI welcome contributions and discussions for development.\n\nAlso, for anyone in Vanuatu, especially students interested in learning software development, I will be happy to work with you and help you contribute your ideas to this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaeltoohig%2Fbilolok","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaeltoohig%2Fbilolok","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaeltoohig%2Fbilolok/lists"}