{"id":27257796,"url":"https://github.com/d1vshar/fullstack-typescript-template","last_synced_at":"2026-04-16T05:33:16.165Z","repository":{"id":86534605,"uuid":"561346285","full_name":"d1vshar/fullstack-typescript-template","owner":"d1vshar","description":"fullstack-typescript-template","archived":false,"fork":false,"pushed_at":"2022-11-06T18:59:14.000Z","size":127,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-25T07:04:44.103Z","etag":null,"topics":["express","full-stack","hackathon","nextjs","template","turborepo","typescript","webdev"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":false,"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/d1vshar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2022-11-03T13:49:40.000Z","updated_at":"2022-11-11T16:18:21.000Z","dependencies_parsed_at":"2023-05-04T14:16:23.316Z","dependency_job_id":null,"html_url":"https://github.com/d1vshar/fullstack-typescript-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/d1vshar/fullstack-typescript-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1vshar%2Ffullstack-typescript-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1vshar%2Ffullstack-typescript-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1vshar%2Ffullstack-typescript-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1vshar%2Ffullstack-typescript-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d1vshar","download_url":"https://codeload.github.com/d1vshar/fullstack-typescript-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1vshar%2Ffullstack-typescript-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31872642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["express","full-stack","hackathon","nextjs","template","turborepo","typescript","webdev"],"created_at":"2025-04-11T03:18:36.611Z","updated_at":"2026-04-16T05:33:16.149Z","avatar_url":"https://github.com/d1vshar.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Full-Stack Typescript Template\nMy personal template for hackathon and side projects.\n\n\u003ca href=\"#license\"\u003e\u003cimg alt=\"GPLv3 License\" src=\"https://img.shields.io/github/license/d1vshar/fullstack-typescript-template\"\u003e\n\n\n## Goal\n\nThis template is meant to be used as a hackathon project template. There are two things needed for such a template: development speed and simplicity.\n\nI will continue adding the minimum required functionality as needed.\n\nTODO: add proper eslint configurations\n\n## Tech Stack \u0026 Tools\n\nThis template is a mono repo built using [Turbo Repo](https://turbo.build/repo). It uses [pnpm](https://pnpm.io/) as its dependency manager.\n\nThere are two project folders: `apps` and `packages`.\n\n`apps` contains \"launchable\" applications or services. These are meant to be hosted / presented / distributed.\n\n`packages` contains projects that are being used in `apps`. Sometimes, you need to split common functionality into different packages.\n\nOne such feature is types for a REST API (explained below).\n\n[`apps/web`](apps/web): A sample NextJS application that uses [`zustand`](https://github.com/pmndrs/zustand) as its state-management solution.\n\n[`apps/api`](apps/api): A sample REST API built using ExpressJS and uses [`zod`](https://zod.dev) for schema validation.\n\n[`packages/tsconfig`](packages/tsconfig): A package containing all tsconfigs being used in the template. This is useful if you have a lot of packages / apps.\n\n[`packages/types-api`](packages/types-api): A package containing all schema and type definitions for the REST api in `apps/api`\n\n[`packages/ui`](packages/ui): A package containing all common UI components. This is usefull if you have many web applications, that re-use code.\n\n### REST API docs \u0026 schemas\n\nOne of the biggest challenges in a 48 hours hackathon is to keep track of fast-evolving REST API endpoints. The best way to keep track is to maintain an OpenAPI spec of your API. But writing and maintaining the spec is a new task which removes any speed advantage it might bring.\n\nWith the goal of speed and simplicity, I have taken two decisions:\n- Make a hacky utility in `apps/api` that adds a new route `GET /route-list` to your express server. This will list all routes on the live server with their parameters.\n- Maintain zod and typescript types in different package `packages/types-api`. This allows these schemas \u0026 types to be imported into web apps. These schemas and types are more than enough to infer the shape of the data the server is exchanging in requests \u0026 responses. Any changes to the data format made by the person working on `apps/api` will automatically cause `TypeError`s and `ZodError`s on the client side. It will give the exact information needed to transform to a new data format.\n\nI have implemented sample endpoints and requests in both `apps/api` and `apps/web`.\n\n## Building \u0026 Running\n\nUses the standard turbo-repo \u0026 pnpm commands.\n```\nnpm i -g pnpm\npnpm i\npnpm dev\npnpm build\n```\n\n## Licensing\n\n[MIT License](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd1vshar%2Ffullstack-typescript-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd1vshar%2Ffullstack-typescript-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd1vshar%2Ffullstack-typescript-template/lists"}