{"id":39248493,"url":"https://github.com/rayologist/the-full-stack-blueprint","last_synced_at":"2026-01-18T00:01:20.315Z","repository":{"id":208304520,"uuid":"707339256","full_name":"Rayologist/The-Full-Stack-Blueprint","owner":"Rayologist","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-05T10:01:49.000Z","size":5,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-12-05T11:27:01.576Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rayologist.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}},"created_at":"2023-10-19T17:35:24.000Z","updated_at":"2023-12-05T11:27:04.916Z","dependencies_parsed_at":"2023-12-05T11:27:03.474Z","dependency_job_id":"d9421ef4-8347-4cda-ae29-daf5d2bdf9fd","html_url":"https://github.com/Rayologist/The-Full-Stack-Blueprint","commit_stats":null,"previous_names":["rayologist/the-full-stack-blueprint"],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/Rayologist/The-Full-Stack-Blueprint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rayologist%2FThe-Full-Stack-Blueprint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rayologist%2FThe-Full-Stack-Blueprint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rayologist%2FThe-Full-Stack-Blueprint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rayologist%2FThe-Full-Stack-Blueprint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rayologist","download_url":"https://codeload.github.com/Rayologist/The-Full-Stack-Blueprint/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rayologist%2FThe-Full-Stack-Blueprint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28523031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T23:53:28.710Z","status":"ssl_error","status_checked_at":"2026-01-17T23:52:20.131Z","response_time":85,"last_error":"SSL_read: 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":[],"created_at":"2026-01-18T00:01:01.009Z","updated_at":"2026-01-18T00:01:20.255Z","avatar_url":"https://github.com/Rayologist.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# full-stack-blueprint\n\n## Backend\n\n### Init package.json\n\n```bash\npnpm init\n```\n\n### Dependencies\n\n```bash\npnpm install bcryptjs cors dotenv express pg \u0026\u0026 pnpm install -D @types/bcryptjs @types/cors @types/express @types/pg nodemon ts-node typescript\n\n```\n\n### Init tsconfig.json\n\n```bash\npnpm tsc --init\n```\n\n### Scripts\n\n```json\n{\n    \"scripts\": {\n        \"dev\": \"nodemon -r dotenv/config src/index.ts\",\n        \"build\": \"tsc --outDir dist\",\n        \"start\": \"node -r dotenv/config dist/index.js\"\n    }\n}\n```\n\n### Types\n\n```typescript\ntype User = {\n  id: number;\n  email: string;\n  password: string;\n  firstName: string;\n  lastName: string;\n  createdAt: Date;\n  updatedAt: Date;\n};\n\n```\n\n### Create env file\n\n```bash\nPOSTGRES_USER=\nPOSTGRES_PASSWORD=\nPOSTGRES_HOST=localhost\nPOSTGRES_PORT=5432\n```\n\n### Connect to Database\n\n```typescript\nif (!process.env.POSTGRES_HOST || !process.env.POSTGRES_PORT || !process.env.POSTGRES_USER || !process.env.POSTGRES_PASSWORD) {\n  throw new Error(\"Missing required environment variables\");\n}\n\nconst db = new Pool({\n  host: process.env.POSTGRES_HOST,\n  port: parseInt(process.env.POSTGRES_PORT),\n  user: process.env.POSTGRES_USER,\n  password: process.env.POSTGRES_PASSWORD,\n  database: process.env.POSTGRES_USER,\n});\n```\n\n### Create User Table\n\n```typescript\nexport type CreateUserArgsType = Pick\u003c\n  User,\n  \"email\" | \"password\" | \"firstName\" | \"lastName\"\n\u003e;\n\nexport async function createUser(\n  args: CreateUserArgsType\n): Promise\u003cUser | null\u003e {\n  const { email, password, firstName, lastName } = args;\n  const result = await db.query(\n    `\n        INSERT INTO users (id, \"firstName\", \"lastName\", email, password)\n        VALUES (uuid_generate_v4(), $1, $2, $3, $4)\n        RETURNING *\n    `,\n    [firstName, lastName, email, password]\n  );\n\n  return result.rows[0] ?? null;\n}\n```\n\n## Find Users\n\n```typescript\nexport async function findUsers(): Promise\u003cUser[]\u003e {\n  const result = await db.query(\n    `\n        SELECT *\n        FROM users\n    `\n  );\n\n  return result.rows;\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frayologist%2Fthe-full-stack-blueprint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frayologist%2Fthe-full-stack-blueprint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frayologist%2Fthe-full-stack-blueprint/lists"}