{"id":28496248,"url":"https://github.com/giomjds/printify","last_synced_at":"2026-05-08T04:41:33.601Z","repository":{"id":297363958,"uuid":"996459213","full_name":"GioMjds/Printify","owner":"GioMjds","description":"Upload your PDF or DOCX, select print settings, pay securely, and track your order in real time—professional prints made effortless.","archived":false,"fork":false,"pushed_at":"2025-06-28T02:30:44.000Z","size":1102,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-28T03:26:41.132Z","etag":null,"topics":["cloudinary","nextjs","postgresql","uploadthing","websockets"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GioMjds.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-05T01:33:55.000Z","updated_at":"2025-06-28T02:30:48.000Z","dependencies_parsed_at":"2025-06-05T07:06:39.482Z","dependency_job_id":"d71a7017-f200-47eb-888d-3c60ec05e633","html_url":"https://github.com/GioMjds/Printify","commit_stats":null,"previous_names":["giomjds/printify"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GioMjds/Printify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GioMjds%2FPrintify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GioMjds%2FPrintify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GioMjds%2FPrintify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GioMjds%2FPrintify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GioMjds","download_url":"https://codeload.github.com/GioMjds/Printify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GioMjds%2FPrintify/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263165657,"owners_count":23423986,"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":["cloudinary","nextjs","postgresql","uploadthing","websockets"],"created_at":"2025-06-08T12:06:57.419Z","updated_at":"2026-05-08T04:41:33.594Z","avatar_url":"https://github.com/GioMjds.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Printify\n# ![Printify Logo](public/printify_logo.png) \n\n\u003e **Seamless document-to-print platform**\n\u003e\n\u003e Upload your `.pdf` or `.docx`, pay securely, and track your order in real time.\n\n---\n\n## 📦 Table of Contents\n\n* [🚀 About](#-about)\n* [✨ Features](#-features)\n* [🛠️ Tech Stack](#tech-stack)\n* [⚙️ Installation \u0026 Setup](#️-installation--setup)\n* [▶️ Usage](#-usage)\n* [📁 Repository Structure](#-repository-structure)\n* [🤝 Contributing](#-contributing)\n\n---\n\n## 🚀 About\n\nPrintify is a professional web portal that transforms your PDF and DOCX documents into high-quality prints—fast, reliable, and user-friendly. Designed for local print shops, it offers a streamlined, end-to-end experience:\n\n* **Upload** documents in seconds\n* **Pay** physically\n* **Track** order status in real time\n\n---\n\n## ✨ Features\n\n* 🔒 **Secure Uploads \u0026 Payments**: SSL encryption and Stripe integration for peace of mind\n* 🕒 **Real-Time Tracking**: WebSockets notifications for status changes\n* 📄 **Document Preview**: In-browser preview before you submit\n* 📧 **Order Confirmation \u0026 Receipts**: Email receipts with unique Order ID\n\n---\n\n## 🛠️ Tech Stack\n\n| Layer         | Technology                               |\n| ------------- | ---------------------------------------- |\n| Front End     | Next.js 15 (App Router), Tailwind CSS v4 |\n| Back End      | Next.js API Routes, TypeScript           |\n| Database      | PostgreSQL, Prisma ORM                   |\n| File Storage  | Cloudinary                               |\n| Real-Time     | WebSockets                               |\n| Email Service | Nodemailer                               |\n\n---\n\n## ⚙️ Installation \u0026 Setup\n\n1. **Clone the repo**\n\n   ```bash\n   git clone https://github.com/GioMjds/Printify.git\n   cd printify\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   npm install\n   ```\n\n3. **Environment Variables** Create a `.env.local` file in the root and add:\n\n   ```bash\n    # PostgreSQL for the database\n    DATABASE_URL=\"postgresql://\u003cyour-username\u003e:\u003cyour-password\u003e@\u003cyour-host\u003e:5432/printify?schema=public\"\n    \n    # Setup your own Cloudinary and fill the credentials needed\n    NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=\n    NEXT_PUBLIC_CLOUDINARY_API_KEY=\n    NEXT_PUBLIC_CLOUDINARY_API_SECRET=\n    CLOUDINARY_URL=\n    \n    # Create your own Gmail Address for your own setup\n    EMAIL_USER=your_own_gmail_address\n    EMAIL_PASS=app_password\n   ```\n\n4. **Run Prisma migrations \u0026 generate client**\n\n   ```bash\n   Just copy the `schema.prisma` file in my repo\n\n   npx prisma migrate dev --name init\n   npx prisma generate\n   ```\n\n5. **Start the development server**\n\n   ```bash\n   npm run dev\n   ```\n\n---\n\n## ▶️ Usage\n\n1. Open `http://localhost:3000` in your browser\n2. **Upload** your PDF or DOCX file\n3. **Select** print settings (paper size, color, duplex, quantity)\n4. **Review** price estimate and **proceed** to payment\n5. **Track** your order status on the dashboard\n6. **Receive** email notification when ready\n\n---\n\n## 📁 Repository Structure\n\n```plaintext\n/printify\n├── components/\n│   ├── ProtectedRoutes.tsx\n│   ├── constants/\n│   │   ├── admin-sidebar.ts\n│   │   ├── customer-sidebar.ts\n│   │   ├── hero.ts\n│   │   └── navbar.ts\n│   ├── hooks/\n│   │   └── useWebSockets.tsx\n│   ├── layout/\n│   │   ├── Footer.tsx\n│   │   └── Navbar.tsx\n├── lib/\n│   ├── auth.ts\n│   └── prisma.ts\n├── public/\n│   ├── file.svg\n│   ├── globe.svg\n│   ├── next.svg\n│   ├── printify_logo.png\n│   ├── vercel.svg\n│   └── window.svg\n├── prisma/\n│   ├── schema.prisma\n│   └── migrations/\n│       ├── migration_lock.toml\n│       ├── 20250605034628_init/\n│       │   └── migration.sql\n│       ├── 20250605100725_init/\n│       │   └── migration.sql\n│       ├── 20250605101251_init/\n│       │   └── migration.sql\n│       └── 20250607093243_init/\n│           └── migration.sql\n├── src/\n│   ├── middleware.ts\n│   ├── app/\n│   │   ├── favicon.ico\n│   │   ├── globals.css\n│   │   ├── providers.tsx\n│   │   ├── (auth)/\n│   │   │   ├── layout.tsx\n│   │   │   ├── login/\n│   │   │   │   ├── login.tsx\n│   │   │   │   └── page.tsx\n│   │   │   ├── register/\n│   │   │   │   ├── page.tsx\n│   │   │   │   └── register.tsx\n│   │   │   └── verify/\n│   │   │       ├── page.tsx\n│   │   │       └── verify-otp.tsx\n│   │   ├── (landing)/\n│   │   │   ├── landing-page.tsx\n│   │   │   ├── layout.tsx\n│   │   │   └── page.tsx\n│   │   ├── (protected)/\n│   │   │   ├── layout.tsx\n│   │   │   ├── sidebar.tsx\n│   │   │   ├── admin/\n│   │   │   │   ├── page.tsx\n│   │   │   │   ├── analytics/\n│   │   │   │   │   └── page.tsx\n│   │   │   │   ├── orders/\n│   │   │   │   │   └── page.tsx\n│   │   │   │   ├── settings/\n│   │   │   │   │   └── page.tsx\n│   │   │   │   └── users/\n│   │   │   │       └── page.tsx\n│   │   │   └── customer/\n│   │   │       ├── page.tsx\n│   │   │       ├── new/\n│   │   │       │   └── page.tsx\n│   │   │       ├── orders/\n│   │   │       │   └── page.tsx\n│   │   │       └── profile/\n│   │   │           └── page.tsx\n│   │   └── api/\n│   │       ├── auth/\n│   │       │   ├── [...nextauth]/\n│   │       │   │   └── route.ts\n│   │       │   └── action/\n│   │       │       └── [action]/\n│   │       │           └── route.ts\n├── services/\n│   ├── _axios.ts\n│   └── Auth.ts\n├── skeletons/\n├── types/\n│   └── useWebSocketsTypes.ts\n├── utils/\n│   ├── otpCache.ts\n│   └── send-email.ts\n├── .env.local\n├── README.md\n├── eslint.config.mjs\n├── next-auth.d.ts\n├── next-env.d.ts\n├── next.config.ts\n├── package.json\n├── pnpm-lock.yaml\n├── pnpm-workspace.yaml\n├── postcss.config.mjs\n├── tsconfig.json\n```\n\n---\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a new branch: `git checkout -b feature/YourFeature`\n3. Commit your changes: `git commit -m 'Add YourFeature'`\n4. Push to the branch: `git push origin feature/YourFeature`\n5. Open a Pull Request\n\nPlease ensure your code follows the existing style and includes tests where applicable.\n\n---\n\n## 📄 License\n\nThis project is licensed under the [MIT License](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiomjds%2Fprintify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgiomjds%2Fprintify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiomjds%2Fprintify/lists"}