{"id":13495836,"url":"https://github.com/supaflare/supaflare","last_synced_at":"2025-04-13T00:48:52.363Z","repository":{"id":45360211,"uuid":"415801910","full_name":"supaflare/supaflare","owner":"supaflare","description":"URL shortener / redirection service powered by Supabase, Cloudflare Workers, Workers KV and Cloudflare Pages.","archived":false,"fork":false,"pushed_at":"2025-03-28T07:32:06.000Z","size":1247,"stargazers_count":213,"open_issues_count":3,"forks_count":56,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-13T00:48:47.481Z","etag":null,"topics":["cloudflare","cloudflare-pages","cloudflare-workers","hacktoberfest","supabase","url-redirector","url-shortener","vuejs","workers-kv"],"latest_commit_sha":null,"homepage":"https://supaflare.licit.dev","language":"Vue","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/supaflare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["licitdev"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-10-11T06:19:54.000Z","updated_at":"2025-04-10T01:42:19.000Z","dependencies_parsed_at":"2023-10-13T16:33:08.711Z","dependency_job_id":"801761af-115e-4ca8-ac38-65b0f90bdee1","html_url":"https://github.com/supaflare/supaflare","commit_stats":{"total_commits":68,"total_committers":2,"mean_commits":34.0,"dds":"0.32352941176470584","last_synced_commit":"995278575b9f870de14c4864a84cafed14b4d0a8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supaflare%2Fsupaflare","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supaflare%2Fsupaflare/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supaflare%2Fsupaflare/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supaflare%2Fsupaflare/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/supaflare","download_url":"https://codeload.github.com/supaflare/supaflare/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650436,"owners_count":21139672,"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":["cloudflare","cloudflare-pages","cloudflare-workers","hacktoberfest","supabase","url-redirector","url-shortener","vuejs","workers-kv"],"created_at":"2024-07-31T19:01:38.740Z","updated_at":"2025-04-13T00:48:52.336Z","avatar_url":"https://github.com/supaflare.png","language":"Vue","funding_links":["https://github.com/sponsors/licitdev"],"categories":["Vue"],"sub_categories":[],"readme":"![supaflare_white_bg](https://user-images.githubusercontent.com/26413686/136743018-6f8923a6-8a3c-44f0-b6ec-b970a9f30b94.png)\n\n##\n\n[![GitHub license](https://img.shields.io/github/license/supaflare/supaflare.svg)](https://github.com/supaflare/supaflare/blob/master/LICENSE)\n![Cloudflare Pages Deployment](https://github.com/supaflare/supaflare/workflows/Cloudflare%20Pages%20Deployment/badge.svg)\n![Cloudflare Workers Deployment](https://github.com/supaflare/supaflare/workflows/Cloudflare%20Workers%20Deployment/badge.svg)\n\n## About\n\nLaunch your own personal URL shortener / redirection service using free tiers of [Supabase](https://supabase.io), [Cloudflare Workers](https://workers.cloudflare.com), [Workers KV](https://developers.cloudflare.com/workers/runtime-apis/kv) and [Cloudflare Pages](https://pages.cloudflare.com).\n\n## Features\n\n- Redirection based on device type (Default / Android / iOS)\n- Support various URL protocols\n- Front-end web application for link management\n\n## Demo\n\n1. Visit [https://supaflare.licit.dev](https://supaflare.licit.dev). Also accessible through [https://supaflare.pages.dev](https://supaflare.pages.dev).\n2. Use Magic Link to login or sign in with GitHub.\n3. Create and manage your links!\n\n   \u003e URLs have to start with a protocol such as `https://`, `ftp://`\n   \u003e\n   \u003e Custom protocols are supported (eg: `tg://` opens the [Telegram](https://telegram.org) app).\n\n4. Test your links at [https://out.licit.dev/](https://out.licit.dev/)`slug`\n\n## Supabase Features Used\n\n### Auth\n\nProvide authentication and segretation of data between different users.\n\n### Database\n\nStore redirection links and metadata.\n\n### JS Library\n\nConvenient access to access the above Supabase features used.\n\n## Cloudflare Features Used\n\n### Cloudflare Workers\n\nPerform URL redirection and to update link data.\n\n### Workers KV\n\nRead and store link data used when redirecting web requests.\n\n### Cloudflare Pages\n\nHost the front-end [Vue 3](https://v3.vuejs.org) web application.\n\n## Installation Guide\n\n### Fork Supaflare\n\nCreate a [Fork](https://github.com/supaflare/supaflare/fork) of Supaflare as the deployments are pushed via GitHub Actions.\n\n### Set up Cloudflare Workers\n\n1. [Sign up](https://dash.cloudflare.com/sign-up/workers) for a Cloudflare Workers account.\n2. Copy the **Account ID** shown in the Workers page somewhere, you will require it later.\n3. Copy the **Subdomain** shown in the Workers page somewhere, you will require it later.\n4. Head over to KV tab, add a new namespace called **SUPAFLARE**.\n5. Update the `id` found in [/worker/wrangler.toml](worker/wrangler.toml) with the one you have just created.\n6. Head over to [API Tokens](https://dash.cloudflare.com/profile/api-tokens) and create a new Custom API Token with Permission of \"Account/Worker Scripts/Edit\".\n7. Copy the **API Key** somewhere, you will require it later.\n\n### Set up Supabase\n\n1. [Sign up](https://app.supabase.io) for a Supabase account.\n2. Create a new Project.\n3. Click SQL on the left menu bar and select `+ New query`.\n4. Copy the contents found in [/app/src/database.sql](app/src/database.sql) and run it in.\n5. Click Settings on the left menu bar and select `API`.\n6. Copy the **Project API key \u003e anon / public** somewhere, you will require it later.\n7. Copy the **Config \u003e URL** somewhere, you will require it later.\n8. Copy the **Config \u003e JWT Secret** somewhere, you will require it later.\n\n### Set up Cloudflare Pages\n\n1. [Sign up](https://dash.cloudflare.com/sign-up/pages) for a Cloudflare Pages account.\n2. Create a new project, selecting the fork of Supaflare in your GitHub account.\n3. Set the framework preset as `Vue`.\n4. Set the build output directory as `dist`.\n5. Set the root directory path as `app`.\n6. Create the following environment variables:\n   1. `VITE_SUPABASE_KEY` with the **Project API key \u003e anon / public**.\n   2. `VITE_SUPABASE_URL` with the **Config \u003e URL**.\n   3. `VITE_SUPAFLARE_WORKER_URL` with `https://supaflare-worker.\u003cyour workers subdomain\u003e.workers.dev`.\n7. After the first build is completed, pause the Automatic git deployments.\n8. Add a new deploy hook, copy the **Deploy hook URL** somewhere, you will require it later.\n\n### Configure GitHub Actions\n\n1. Open the forked GitHub project \u003e Settings \u003e Secrets.\n2. Create the following repository secrets:\n   1. `CLOUDFLARE_ACCOUNT_ID` with the **Account ID**.\n   2. `CF_API_TOKEN` with the **API Key**.\n   3. `CF_PAGES_MASTER_WEBHOOK_URL` with the **Deploy hook URL**.\n   4. `SUPABASE_API_KEY` with the **Project API key \u003e anon / public**.\n   5. `SUPABASE_JWT_SECRET` with the **Config \u003e JWT Secret**.\n   6. `SUPABASE_URL` with the **Config \u003e URL**.\n   7. `SUPAFLARE_ADMIN_KEY` with a random non-empty string, used as secret for manual updates.\n   8. `MASK_WORKER_URL` with your worker hostname for masking. Eg: test.workers.dev\n3. Click on the Actions tab, manually run the workflows.\n\n### Configure Supabase Auth\n\nPlease set the Site URL in `Supabase Settings \u003e Auth settings` to be the URL of your Cloudflare Pages site.\nFor external OAuth providers, refer to the [auth guide](https://supabase.io/docs/guides/auth) provided by Supabase.\n\n### Restrict Web Application Access\n\nYou may restrict the access to your web application using [Cloudflare Access](https://www.cloudflare.com/teams/access/) based on your requirements.\n\n## Upcoming Features\n\n- Search \u0026 Filtering of Links\n- QR Code Display\n- Link Expiry Datetime\n- Password Protection\n- Country Redirect\n\n##\n\nDeveloped by [licitdev](https://github.com/licitdev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupaflare%2Fsupaflare","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsupaflare%2Fsupaflare","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupaflare%2Fsupaflare/lists"}