{"id":50354495,"url":"https://github.com/johnseth97/it299","last_synced_at":"2026-05-29T22:01:43.878Z","repository":{"id":304552122,"uuid":"1019112248","full_name":"johnseth97/IT299","owner":"johnseth97","description":"IT 299 Integrative Project","archived":false,"fork":false,"pushed_at":"2025-07-13T20:42:34.000Z","size":150,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-13T21:29:08.145Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CSS","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/johnseth97.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-07-13T19:02:56.000Z","updated_at":"2025-07-13T20:41:08.000Z","dependencies_parsed_at":"2025-07-13T21:39:23.949Z","dependency_job_id":null,"html_url":"https://github.com/johnseth97/IT299","commit_stats":null,"previous_names":["johnseth97/it299"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/johnseth97/IT299","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnseth97%2FIT299","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnseth97%2FIT299/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnseth97%2FIT299/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnseth97%2FIT299/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnseth97","download_url":"https://codeload.github.com/johnseth97/IT299/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnseth97%2FIT299/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33672125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"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":[],"created_at":"2026-05-29T22:01:40.036Z","updated_at":"2026-05-29T22:01:43.862Z","avatar_url":"https://github.com/johnseth97.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📸 Photo Order Web App – IT299 Capstone\n\n## A full-stack web application for ordering photography services online.\n\n### Developed as the final product for the IT299 Integrative Project at Purdue Global\n\n---\n\n## Table of Contents\n- [Purpose](#-purpose)\n- [Tech Stack](#-tech-stack)\n- [Live Demo](#live-demo)\n- [Features](#features)\n- [Getting Started (For Developers)](#getting-started-for-developers)\n- [Project Structure from Root](#project-structure-from-root)\n- [Author](#author)\n- [License](#license)\n\n---\n\n# Purpose\n\nThis app allows customers to:\n\n- Select photography services (e.g., prints, edits, film scans)\n- Add them to a cart\n- Upload corresponding photos\n- Submit and retrieve orders by email or order ID — no login required\n\nDesigned to streamline operations for Picture This Photography, improve customer satisfaction, and increase stakeholder value.\n\n---\n\n## Tech Stack\n\n| Layer        | Technology                           |\n|-------------|----------------------------------------|\n| Frontend     | React + TypeScript + Vite + Express   |\n| Backend      | Node.js + Express + TypeScript        |\n| Database     | SQLite (non-persistent for demo use)  |\n| Styling / UI | shadcn/ui components                  |\n| Uploads      | Local base64 image storage            |\n| DevOps       | Docker + Docker Compose               |\n| CI/CD        | GitHub Actions                        |\n| Hosting      | Azure Container Apps (Simulated AAS)  |\n\n---\n\n## Live Demo\n\n**URL:**  \n`https://it299-frontend-app.graydune-3d57e178.eastus.azurecontainerapps.io`\n\n**Access:**  \n\n- Github login required, as simple DDOS precaution.\n- Container App set to auto-scale down to 0 instances when idle.\n  - If the app is slow to load, it may be scaling up from 0.\n  - Please wait 30-60 seconds and refresh.\n  - Same for first call to the backend API.\n- To test order flow:\n  - add a service to the cart →\n  - upload photos → submit →\n  - check orders by email\n\n---\n\n## Features\n\n- **Cart-based Ordering** with image upload dialogs and undo options\n- **Email-based Order Lookup** (no account needed)\n- **Real-time Upload Preview** using base64 thumbnails\n- **Service Browser** from live API data (`/api/service-types`)\n- **CI/CD Pipeline** with semantic versioning and Docker image release\n- **Azure deployment** with simulated enterprise conditions\n\n---\n\n## Getting Started (For Developers)\n\n### Local Production Setup\n\n```bash\ngit clone https://github.com/johnseth97/IT299\ncd IT299\n\n# Local Production Compose (Docker)\ndocker-compose -f docker-compose.yml up --build\n\n# Local Production native\ncd Backend \u0026\u0026 npm install \u0026\u0026 npm run dev\ncd Frontend \u0026\u0026 npm install \u0026\u0026 npm run dev\n\n# Local Development using Vite (From Root)\nnpm i \u0026\u0026 npm run dev\n\n```\n\nAll local builds use .env files in /Frontend and /Backend for local configuration.\n\n---\n\n## Project Structure from Root\n\n```sh\n/Frontend     # React + Vite app (client UI)\n/Backend      # Express + SQLite backend (REST API)\n/.github      # GitHub Actions workflows\nDockerfile.*  # Container builds\ndocker-compose.yml # Docker Compose for local production\n```\n\n---\n\n## Author\n\n```markdown\nEthan Johnson\nIT299 – Purdue Global, Summer 2025\nAll code original unless otherwise noted.\n```\n\n---\n\n## License\n\n***Academic use only. For IT299 evaluation and demonstration purposes.***\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnseth97%2Fit299","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnseth97%2Fit299","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnseth97%2Fit299/lists"}