{"id":28936494,"url":"https://github.com/lethabomaepa11/colearnspace","last_synced_at":"2026-04-12T14:54:28.246Z","repository":{"id":293276177,"uuid":"968398304","full_name":"lethabomaepa11/colearnspace","owner":"lethabomaepa11","description":"ColearnSpace is a community skill building and showcasing hub, using youtube videos as part of community driven courses, it allows everyone to create a course, youtube videos embedded or not, users can also make lessons via text, not to forget challenges, create challenges and let users battle out to showcase their coding \u0026 problem solving skills","archived":false,"fork":false,"pushed_at":"2025-06-21T16:19:59.000Z","size":3762,"stargazers_count":1,"open_issues_count":10,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-21T17:27:35.894Z","etag":null,"topics":["community-project","courses","css","daisyui","docker","html","javascript","lessons","skills","supabase","svelte","sveltekit","tailwindcss","typescript","youtube"],"latest_commit_sha":null,"homepage":"https://colearnspace.netlify.app","language":"Svelte","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/lethabomaepa11.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}},"created_at":"2025-04-18T02:48:57.000Z","updated_at":"2025-06-14T22:21:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"d755bfd6-8a60-479e-b1d4-a90e8232cb9c","html_url":"https://github.com/lethabomaepa11/colearnspace","commit_stats":null,"previous_names":["lethabomaepa11/colearnspace"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lethabomaepa11/colearnspace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lethabomaepa11%2Fcolearnspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lethabomaepa11%2Fcolearnspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lethabomaepa11%2Fcolearnspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lethabomaepa11%2Fcolearnspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lethabomaepa11","download_url":"https://codeload.github.com/lethabomaepa11/colearnspace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lethabomaepa11%2Fcolearnspace/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261361820,"owners_count":23147277,"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":["community-project","courses","css","daisyui","docker","html","javascript","lessons","skills","supabase","svelte","sveltekit","tailwindcss","typescript","youtube"],"created_at":"2025-06-22T20:31:04.321Z","updated_at":"2025-10-25T21:44:16.230Z","avatar_url":"https://github.com/lethabomaepa11.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoLearnSpace\n\nA modern web application built with [SvelteKit](https://kit.svelte.dev), Supabase, and a modular feature-first architecture. This app is designed to scale, with a strong focus on shared logic, clean data handling, and good developer experience😅😓.\n\n---\n\n## Features\n\n- Challenges: Create/host a tech challenge, have users battle it out to showcase their skills as they solve a problem you created💀I'm kidding... but for real\n- Courses: Create courses using videos under 50mb or use your youtube videos, can be embedded into your modules easily, just copy and paste the video link\n- Not sure if its a feature☠️ But you don't have to create an account to use the features here, \"ghost\" has got your back😅just don't abuse him🥺he's already working overtime.\n\n## What to expect as a Dev?\n\n- Feature-based folder structure (`/challenges`, `/courses`, etc.)\n- Shared business logic in `/lib/server/[feature]/`\n- API routes in `/routes/api/`\n- SSR-powered data fetching using `+page.server.ts`\n- Supabase for authentication, storage, and database\n- Supports both authenticated and anonymous users\n\n---\n\n## 🗂️ Project Structure\n\n```\n\n/\n├── lib/\n│   └── server/\n│       └── challenges/\n│           ├── core.ts         # Main logic: fetching challenges, etc.\n│           ├── submissions.ts  # Submission logic\n│           └── community.ts    # Community topics logic\n│\n├── routes/\n│   ├── challenge/\n│   │   └── \\[slug]/\n│   │       ├── +page.svelte\n│   │       ├── +page.server.ts  # Uses logic from lib/server/challenges\n│   │       └── community/\n│   │       └── submissions/\n│   └── api/\n│       └── challenge/\n│           ├── +server.ts            # POST: Create challenge\n│           └── \\[slug]/\n│               ├── +server.ts        # GET: Fetch specific challenge\n│               └── submissions/\n│                   └── +server.ts    # GET: Submissions for a challenge\n│\n└── README.md\n\n```\n\n---\n\n## 🧠 Data Layer Philosophy\n\nWe use shared logic in `lib/server` to prevent code duplication. If a feature needs data fetching, validation, or transformation:\n\n- Create a folder for it in `lib/server/[feature]`\n- Place all logic functions in meaningful files (`core.ts`, `submissions.ts`, etc.)\n- Reuse these functions in both:\n  - `+page.server.ts` (for SSR)\n  - `+server.ts` (for APIs)\n\n---\n\n## 💡 Example: How to Fetch Challenge Submissions\n\n```ts\n// lib/server/challenges/submissions.ts\nexport async function getSubmissionsForChallenge(slug: string) {\n\t// Supabase logic here\n}\n\n// routes/api/challenge/[slug]/submissions/+server.ts\nimport { getSubmissionsForChallenge } from '$lib/server/challenges/submissions';\n\nexport async function GET({ params }) {\n\tconst submissions = await getSubmissionsForChallenge(params.slug);\n\treturn json(submissions);\n}\n```\n\n---\n\n## Running Locally\n\nLets get into business now\n\n### You just have to...\n\n```bash\nnpm install\nnpm run dev\n```\n\n### To spin up your backend, make sure you have Docker installed and running\n\nRun the following command\n\n```bash\nnpx supabase start\n```\n\nIt will download the supabase docker image for you to use locally\nWhen its done running, you will have to copy the supabase url and the anon key and create a .env file in the root of your project\n\nThen set up your `.env` with Supabase keys, for example:\n\n```env\nPUBLIC_SUPABASE_URL=...\nPUBLIC_SUPABASE_ANON_KEY=...\n```\n\n#### If you are having trouble with the previous step, go to this link https://supabase.com/docs/guides/local-development\n\n---\n\n## 🌱 Contributing\n\nIf you're adding a new feature:\n\n- Create a new folder in `lib/server/[feature]`\n- Add functions for handling server logic there\n- Use those in `+server.ts` or `+page.server.ts` as needed\n- Keep your files short and single-responsibility\n- We use camelCase in our code, and snake_case in our database to define entities and attributes\n\n---\n\n## 🔐 Security Notes\n\nWe support both authenticated and anonymous access. For anonymous users, progress tracking is done using the client IP address (non-invasive, limited use). Avoid storing any sensitive data.\n\n---\n\n## 📦 Tech Stack\n\n- SvelteKit\n- Docker\n- Supabase (PostgreSQL, Storage, Auth)\n- TypeScript\n- Lucide Icons (via `lucide-svelte`)\n- TailwindCSS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flethabomaepa11%2Fcolearnspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flethabomaepa11%2Fcolearnspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flethabomaepa11%2Fcolearnspace/lists"}