{"id":45153871,"url":"https://github.com/rblalock/onestudy-v1-oss","last_synced_at":"2026-02-20T03:32:08.085Z","repository":{"id":246858740,"uuid":"822377340","full_name":"rblalock/onestudy-v1-oss","owner":"rblalock","description":"Open Source Qualitative Research and Customer Survey Platform","archived":false,"fork":false,"pushed_at":"2024-07-12T19:51:43.000Z","size":357,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-12T22:05:01.802Z","etag":null,"topics":["interviews","qualitative-analysis","research","survey"],"latest_commit_sha":null,"homepage":"https://onestudy.ai","language":"TypeScript","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/rblalock.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":"2024-07-01T03:18:09.000Z","updated_at":"2024-07-11T01:35:04.000Z","dependencies_parsed_at":"2024-07-05T15:08:42.582Z","dependency_job_id":"4b62cec9-6787-4baa-9252-129c63805a75","html_url":"https://github.com/rblalock/onestudy-v1-oss","commit_stats":null,"previous_names":["rblalock/onestudy-v1-oss"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rblalock/onestudy-v1-oss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblalock%2Fonestudy-v1-oss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblalock%2Fonestudy-v1-oss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblalock%2Fonestudy-v1-oss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblalock%2Fonestudy-v1-oss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rblalock","download_url":"https://codeload.github.com/rblalock/onestudy-v1-oss/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rblalock%2Fonestudy-v1-oss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29640626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T03:21:14.183Z","status":"ssl_error","status_checked_at":"2026-02-20T03:18:24.455Z","response_time":59,"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":["interviews","qualitative-analysis","research","survey"],"created_at":"2026-02-20T03:32:07.144Z","updated_at":"2026-02-20T03:32:08.080Z","avatar_url":"https://github.com/rblalock.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Main OneStudy App\n\n## Getting started\n\n- Clone this\n- `npm install`\n- Setup your `.env.local` file with the right environment variables\n\n### Setting the ENV vars\n\nRename `.env.example` to `.env.local` and set the right values. Note that you will need to\nget a lot of them from the appropriate services, which are named in the env file.\n\n### Starting the Next.js server\n\nStart the application:\n\n```\nnpm run dev\n```\n\nThe application should be running at [http://localhost:3000](http://localhost:3000).\n\n### Database\n\nThe Database URL needs to be a postrgres URL.\n\nYou will need the following extensions available in your postgres instance:\n\n```sql\nCREATE EXTENSION IF NOT EXISTS \"pg_uuidv7\";\nCREATE EXTENSION IF NOT EXISTS \"vector\";\n```\n\n**Note:** The first migration has these in it - so you can just run `npm run db:migrate` to set up your database.\n\n### Inngest\n\n[Inngest](https://www.inngest.com/) is what we use for events (queues, cron jobs, etc.). You'll need this running to complete a lot of things.\n\n```\nnpm run eventserver\n```\n\n### Clerk.com local webhook testing\n\nIf you want to test the Clerk.com webhooks locally, you'll need to run the Inngest server above and send `hook/auth` events through, to test. Inngest production and \"preview\" environments\nhave their own webhook URL's that Clerk references.\n\n#### Step one: Get a payload from Clerk.com\n\n1. Go to the webhook section of Clerk.dev\n2. Click \"Testing\"\n3. Pick an event type\n4. Copy it\n5. Go to the local Inngest server, click \"send event\", paste the payload, and send it\n\nFor example from Clerk.com's `user.deleted` event:\n\n```json\n{\n  \"data\": {\n    \"deleted\": true,\n    \"id\": \"user_29wBMCtzATuFJut8jO2VNTVekS4\",\n    \"object\": \"user\"\n  },\n  \"object\": \"event\",\n  \"type\": \"user.deleted\"\n}\n```\n\nShould be put in a new event in Inngest like this:\n\n```json\n{\n  \"name\": \"hook/auth\",\n  \"data\": {\n    \"data\": {\n      \"deleted\": true,\n      \"id\": \"user_29wBMCtzATuFJut8jO2VNTVekS4\",\n      \"object\": \"user\"\n    },\n    \"object\": \"event\",\n    \"type\": \"user.deleted\"\n  },\n  \"user\": {}\n}\n```\n\nOnce you send it, you should see it go through the local Inngest logs and also in your local environement of the app.\n\n#### NGROK\n\nYou can also setup someting like Ngrok to send events to your local machine. You can then point the webhook in Clerk to that URL, and it will send events to your local machine. For example:\n\n```bash\nngrok http 3000 --verify-webhook clerk --verify-webhook-secret YOUR_CLERK_WEBHOOK_SECRET_HERE\n```\n\nThen copy the URL it gives you, and paste it into the webhook URL field in Clerk.com + add `/api/auth/hook` to the end of it.\n\n### API Keys\n\nEach org can issue their own API keys. How it works for them:\n\n- They go to `/settings/apikeys` and create an API key\n- We will insert in to the key's metadata the \"organizationId\" they belong to.\n- When we check the public API against their key, we will ensure that the organizationId matches the organizationId of the study and interviews they're trying to access.\n\nThe purpose for this is for the Respondent App, which is a separate app that interviewees interact with.\n\n#### For One Study Keys\n\nThese need to be provisioned inside of Unkey.dev.\n\nYou can quickly create an API key for the right environment here: https://unkey.dev/app/apis. Give it:\n\n- A name\n- A ratelimit. e.g. 100 requests per second\n- IMPORTANT: `Owner ID` should have the exact value specified in your ENV file: `API_KEY_SUPER_OWNER` We check this instead of the organizationId.\n\n### Public API's\n\nMoved to Notion\n\n[Internal link](https://www.notion.so/onestudy/API-Documentation-e10acf3a2f374687ba58b26e7ab41d0c?pvs=4)\n\n[Public link](https://onestudy.notion.site/API-Documentation-e10acf3a2f374687ba58b26e7ab41d0c?pvs=4)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frblalock%2Fonestudy-v1-oss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frblalock%2Fonestudy-v1-oss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frblalock%2Fonestudy-v1-oss/lists"}