[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73639":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":26,"discoverSource":27},73639,"campsite","campsite\u002Fcampsite","The Campsite monorepo","https:\u002F\u002Fcampsite.com",null,"TypeScript",4829,725,10,5,0,2,98,30.58,"Other",false,"main",[],"2026-06-12 02:03:16","# Campsite\n\nThis is an open source version of the [Campsite](https:\u002F\u002Fwww.campsite.com\u002F) app. This codebase is available **as-is** and is not actively maintained by the Campsite team. We will only consider pull requests and issues regarding self-hosting or critical fixes. The codebase is provided as a reference for those interested in learning how Campsite works. We welcome forks of this repository for use in non-commercial projects.\n\n## Local dev setup\n\nTo get started, run this command from the workspace root:\n\n```bash\nscript\u002Fsetup\n```\n\nCampsite requires setting up several services before you can run the basic version locally.\n\n### S3 (critical)\n\nS3 is needed to upload avatars and attachments. We recommend separate buckets for dev and production. For example, we use `campsite-media` and `campsite-media-dev` buckets.\n\nYou should setup a IAM user with [these suggested policies](aws-policies.md) (make sure to use your buckets in the policy).\n\nSet your credentials for the API:\n\n```bash\ncd api\nscript\u002Fcredentials development\n```\n\nConfigure these under the `aws` key.\n\nWe also recommend uploading the contents of the `default_avatars` directory under `static\u002Favatars` in each S3 bucket. [Read more here](default_avatars\u002Freadme.md).\n\n### Pusher (critical)\n\n[Pusher](https:\u002F\u002Fpusher.com\u002F) is used to send realtime updates and events. After creating your account, configure this under the `pusher` key in your credentials.\n\n### Imgix (critical)\n\n[Imgix](https:\u002F\u002Fwww.imgix.com\u002F) is the CDN powering Campsite. On AWS IAM, you will need to create an imgix user + policy ([see recommended policy](aws-policies.md)).\n\nThen, add S3 as an [Imgix source](https:\u002F\u002Fdocs.imgix.com\u002Fen-US\u002Fgetting-started\u002Fsetup\u002Fcreating-sources\u002Famazon-s3). If you setup dev and prod S3 buckets, you will need a separate Imgix source for each.\n\nLastly, create an API Key for Imgix in your account dropdown.\n\nFill in all of these values in the credentials files:\n\n- `imgix.url` - The S3 sourced image domain. Should look like https:\u002F\u002Fcampsite-dev.imgix.net\n- `imgix.source_id` - The Imgix source ID (top of the source page or in the URL)\n- `imgix.api_key` - The API key you created\n- `imgix_video.url` - Same URL as `imgix.url` but with `.video` as the TLD (e.g. https:\u002F\u002Fcampsite-dev.imgix.video)\n\n> [!NOTE]\n> While here you can also setup [Imgix Web Folders](https:\u002F\u002Fdocs.imgix.com\u002Fen-US\u002Fgetting-started\u002Fsetup\u002Fcreating-sources\u002Fweb-folder) and put the URL in `imgix_folder.url`. This is used to cache doc thumbnails, but isn't necessary on local dev. The web folder is needed to host doc thumbnails in prod.\n\n### 100ms\n\n[100ms](https:\u002F\u002Fwww.100ms.live\u002F) powers Campsite's video conferencing features. After creating an account, set these values under the `hms` credentials key.\n\n> [!NOTE]\n> Video calls with webhooks will only work when using a secure tunnel such as ngrok.\n\n### OpenAI\n\nWe use the OpenAI API to generate summaries for calls and posts. You need both an API key and your organization ID (not the name, found in OpenAI platform settings). Add these under the `openai` credentials key.\n\n### Others\n\nThere are many other services we use to power Campsite features. Create accounts and set up credentials as needed:\n\n- `aws_ecs` - run data exports on AWS Elastic Container Service\n- `cal_dot_com` - the Campsite [Cal.com](https:\u002F\u002Fcal.com\u002F) app\n- `figma` - render frames via the [Figma REST API](https:\u002F\u002Fwww.figma.com\u002Fdevelopers\u002Fapi)\n- `linear` - the Campsite Linear app (see [API docs](https:\u002F\u002Fdevelopers.linear.app\u002Fdocs))\n- `omniauth_google` - Google OAuth\n- `plain` - customer feedback (likely not needed)\n- `postmark` - sending emails via the [Postmark API](https:\u002F\u002Fpostmarkapp.com\u002Fdeveloper)\n- `sentry` - bug reports, just need the DSN\n- `slack` - Campsite Slack app\n- `vercel.revalidate_static_cache` - generate your own key to safely revalidate cached docs (ISR)\n- `webpush_vapid` - VAPID keys necessary to send web push notifications ([docs](https:\u002F\u002Fgithub.com\u002Fpushpad\u002Fweb-push#generating-vapid-keys))\n- `zapier` - The Campsite Zapier app\n- `tenor` - GIF search ([docs](https:\u002F\u002Ftenor.com\u002Fgifapi))\n\n## Running Campsite in development\n\nWe use [Overmind](https:\u002F\u002Fgithub.com\u002FDarthSim\u002Fovermind) to run all of the services needed to develop Campsite locally. To get started, run `script\u002Fsetup` to install tmux and Overmind. Then run:\n\n```shell\nscript\u002Fdev\n```\n\nOur [Procfile](https:\u002F\u002Fgithub.com\u002Fcampsite\u002Fcampsite\u002Fblob\u002Fmain\u002FProcfile) defines the services Overmind runs. Use `overmind connect` to view the logs of a specific service (e.g. `overmind connect sync-server`).\n\n## Running the web app\n\n1. Install npm packages\n\n```shell\npnpm install\n```\n\n2. Connect Vercel\n\n```shell\npnpm i -g vercel\n```\n\n3. Sign in to your Vercel account\n\n```shell\nnpx vercel login\n```\n\n4. Link the apps to Vercel\n\n```shell\nnpx vercel link --repo\n? Set up and develop “~\u002F\u003Cyour_path_to_campsite>”? [Y\u002Fn] y\n? Which scope should contain your project? Campsite\n? Found project “campsite\u002Fcampsite”. Link to it? [Y\u002Fn] y\n🔗  Linked to campsite\u002Fcampsite (created .vercel)\n```\n\n5. Pull environment variables from Vercel\n\n```shell\ncd apps\u002Fweb && npx vercel env pull\n```\n\n6. Run the app\n\n```shell\nnpx vercel dev\n```\n\n5. Open the app at `http:\u002F\u002Fapp.campsite.test:3000` — you will be redirected to the auth page with user credentials pre-filled.\n\n## Running the marketing site\n\n1. Follow the steps above to connect the `apps\u002Fsite` repo to the `campsite-site` project on Vercel.\n\n2. Pull environment variables from Vercel\n\n```shell\ncd apps\u002Fsite && npx vercel env pull\n```\n\n3. Run the site\n\n```shell\npnpm -F @campsite\u002Fsite dev\n```\n\n4. Open the app at `http:\u002F\u002Flocalhost:3003`\n\n## Running Storybook\n\n```shell\npnpm -F @campsite\u002Fweb storybook\n```\n\n## Installing new packages\n\nTo add new packages, you always install at the root of the repository and pass a filter flag to pnpm. For example, to install Tailwind to the marketing site, you would run:\n\n```shell\npnpm -F @campsite\u002Fsite i tailwindcss\n```\n\nOr to install lodash to the web app, you would run:\n\n```shell\npnpm -F @campsite\u002Fweb i lodash\n```\n\nTo find an app or package name, navigate to the `package.json` for each `app\u002F` or `package\u002F` directory.\n\n## Running the Desktop App locally\n\n1. [Download the ToDesktop build macOS App](https:\u002F\u002Fdl.todesktop.com\u002F2108257l5oobyoe).\n2. Look for the app switcher in the ToDesktop title bar. If you do not see our org apps here, you may need to create a dummy application.\n3. Switch to \"Campsite Dev\" and click \"Run\" in the bottom left corner of the app.\n\n\u003Cdetails>\n  \u003Csummary>View screenshot\u003C\u002Fsummary>\n\n  \u003Cimg width=\"927\" alt=\"Screen Shot 2023-01-11 at 15 20 46@2x\" src=\"https:\u002F\u002Fuser-images.githubusercontent.com\u002F1923260\u002F211939117-f9a2a6cf-99c2-4220-b732-b109c5c859e9.png\">\n\u003C\u002Fdetails>\n\n## Running the API locally\n\nAre you looking to setup and run the API locally? Checkout the [API README](api\u002FREADME.md)\n\n✨\n\n## API secrets\n\nRunning `script\u002Fsetup` will generate [Rails custom credential files](https:\u002F\u002Fedgeguides.rubyonrails.org\u002Fsecurity.html#custom-credentials) for development and production environments. From the API directory, run `VISUAL=\"code --wait\" bin\u002Frails credentials:edit --environment development` to edit development credentials, or run `VISUAL=\"code --wait\" bin\u002Frails credentials:edit --environment development` to edit production credentials.\n\nWhen you deploy Campsite, `config\u002Fcredentials\u002Fproduction.yml.enc` must be present on your production server, and you must set the `RAILS_MASTER_KEY` environment variable equal to the contents of `config\u002Fcredentials\u002Fproduction.key`. If you deploy from a git repository, you can remove `config\u002Fcredentials\u002Fproduction.yml.enc` from `.gitignore` and commit the file. Do not remove `config\u002Fcredentials\u002Fproduction.key` from `.gitignore`, instead share this with your team in a safe place outside of the repository, such as in a password vault.\n\n## Calls in development\n\nTo use calls in development, you'll need to treat the `http:\u002F\u002Fapp.campsite.test:3000` origin as secure. In a Chromium-based browser, you can do that at chrome:\u002F\u002Fflags\u002F#unsafely-treat-insecure-origin-as-secure.\n\nFor any call features that require webhooks (like getting chat bubbles in message threads when calls start), you should [use ngrok](https:\u002F\u002Fgithub.com\u002Fcampsite\u002Fcampsite\u002Ftree\u002Fmain\u002Fapi#using-ngrok-for-publicly-accessible-https-development-urls). You can enable webhooks in the [developer tab of the 100ms dashboard](https:\u002F\u002Fdashboard.100ms.live\u002Fdeveloper). The webhook URL should be set to `https:\u002F\u002Fapi-dev.campsite.com\u002Fv1\u002Fintegrations\u002Fhms\u002Fevents`, and there should be a webhook header with the name `X-Passcode` and a value that comes from running `Rails.application.credentials.hms.webhook_passcode` in a development Rails console. Be sure that you configure webhooks in the \"Development\" workspace and disable them when you're done working in ngrok (webhooks in the \"Production\" workspace should always be enabled and the configuration shouldn't change).\n","Campsite 是一个开源项目，旨在提供 Campsite 应用的代码库。该项目使用 TypeScript 构建，具备创建和管理虚拟营地的功能，并支持实时更新、视频会议以及内容生成等特性。技术上依赖于 S3 用于存储用户头像和附件，Pusher 实现实时通信，Imgix 作为 CDN 提供图片处理服务，100ms 支持视频会议功能，同时利用 OpenAI API 为通话和帖子生成摘要。适合对社交平台或在线协作工具有兴趣的研究者及开发者学习参考，尤其适用于非商业用途下的自托管部署场景。","2026-06-11 03:46:29","high_star"]