{"id":17592316,"url":"https://github.com/robertaboukhalil/multiplayer-igv","last_synced_at":"2025-04-29T11:12:45.635Z","repository":{"id":128445279,"uuid":"412678770","full_name":"robertaboukhalil/multiplayer-igv","owner":"robertaboukhalil","description":"Multiplayer IGV","archived":false,"fork":false,"pushed_at":"2024-06-18T20:28:33.000Z","size":509,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-29T11:12:40.690Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://igv.sandbox.bio","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/robertaboukhalil.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}},"created_at":"2021-10-02T03:22:46.000Z","updated_at":"2024-06-18T20:28:34.000Z","dependencies_parsed_at":"2023-05-27T15:00:34.409Z","dependency_job_id":"7e589777-ace1-46bc-9c0d-492e1ffa8002","html_url":"https://github.com/robertaboukhalil/multiplayer-igv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertaboukhalil%2Fmultiplayer-igv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertaboukhalil%2Fmultiplayer-igv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertaboukhalil%2Fmultiplayer-igv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertaboukhalil%2Fmultiplayer-igv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertaboukhalil","download_url":"https://codeload.github.com/robertaboukhalil/multiplayer-igv/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251490169,"owners_count":21597564,"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":[],"created_at":"2024-10-22T05:09:49.337Z","updated_at":"2025-04-29T11:12:45.619Z","avatar_url":"https://github.com/robertaboukhalil.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multiplayer IGV\n\nAdds real-time collaboration to an IGV.js view, with share links and saved annotations.\n\n## Demo\n\nTest it out at https://igv.sandbox.bio/.\n\n## Development\n\n### Pre-requisites\n\n1. Supabase account with free tier (needed even for local dev unless you setup [their open source infra](https://github.com/supabase/realtime) yourself)\n2. Cloudflare account (not needed for local dev)\n\n### Supabase config\n\nAfter cloning this repo, create a `.env` file in the root folder that contains your Supabase database's **public** URL and anonymous key:\n\n```\nPUBLIC_SUPABASE_URL = \"https://YOUR_SUPABASE_PROJECT_ID.supabase.co\"\nPUBLIC_SUPABASE_KEY_ANON = \"YOUR_SUPABASE_ANON_KEY\"\nSUPABASE_KEY_ADMIN = \"YOUR_SUPABASE_ADMIN_KEY\"\n```\n\nYou'll find that information in your Supabase dashboard under Settings --\u003e API.\n\nMake sure you use the **anonymous** key for `PUBLIC_SUPABASE_KEY_ANON` since it is exposed on the frontend, which is intended.\n\n### Supabase table creation\n\nThe SQL needed to create the table that stores information about each IGV session:\n\n```sql\ncreate table\n  public.rooms_stg (\n    id bigint generated by default as identity not null,\n    uuid text not null,\n    name text null,\n    config jsonb null,\n    regions jsonb not null default '[]'::jsonb,\n    time_created timestamp with time zone null default now(),\n    constraint rooms_pkey primary key (id)\n  ) tablespace pg_default;\n```\n\n### Cloudflare config (skip for local dev)\n\nIn your Cloudflare account's dashboard, set up Cloudflare Pages. In the form:\n\n1. Connect your fork of this repo so that it gets deployed every time you push to `main`\n2. For build settings, choose the Svelte Kit preset\n3. For environment variables, set:\n\n```\nNODE_VERSION=16\nPUBLIC_SUPABASE_URL = \"https://YOUR_SUPABASE_PROJECT_ID.supabase.co\"\nPUBLIC_SUPABASE_KEY_ANON = \"YOUR_SUPABASE_ANON_KEY\"\nSUPABASE_KEY_ADMIN = \"YOUR_SUPABASE_ADMIN_KEY\" # Make sure to click the encrypt icon for this one\n```\n\n### Launch web server (local dev)\n\n```bash\nnpm run dev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertaboukhalil%2Fmultiplayer-igv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertaboukhalil%2Fmultiplayer-igv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertaboukhalil%2Fmultiplayer-igv/lists"}