{"id":22436560,"url":"https://github.com/bjornmelin/simple-pdf-merger","last_synced_at":"2026-04-11T13:04:02.013Z","repository":{"id":264291134,"uuid":"892957264","full_name":"BjornMelin/simple-pdf-merger","owner":"BjornMelin","description":"A modern, user-friendly web application for merging PDF files with a clean and intuitive interface. Built with Next.js, TypeScript, and Tailwind CSS. Features drag-and-drop file upload, file reordering, and responsive design.","archived":false,"fork":false,"pushed_at":"2024-11-23T07:59:56.000Z","size":257,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T08:50:14.461Z","etag":null,"topics":["fastapi","nextjs","pdf-merger","python","shadcn-ui","tailwindcss"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/BjornMelin.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}},"created_at":"2024-11-23T06:25:05.000Z","updated_at":"2025-01-25T04:17:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"88fc9375-561f-408e-8032-d9e2baa414fd","html_url":"https://github.com/BjornMelin/simple-pdf-merger","commit_stats":null,"previous_names":["bjornmelin/simple-pdf-merger"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BjornMelin/simple-pdf-merger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BjornMelin%2Fsimple-pdf-merger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BjornMelin%2Fsimple-pdf-merger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BjornMelin%2Fsimple-pdf-merger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BjornMelin%2Fsimple-pdf-merger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BjornMelin","download_url":"https://codeload.github.com/BjornMelin/simple-pdf-merger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BjornMelin%2Fsimple-pdf-merger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31681217,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"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":["fastapi","nextjs","pdf-merger","python","shadcn-ui","tailwindcss"],"created_at":"2024-12-06T00:08:15.127Z","updated_at":"2026-04-11T13:04:02.007Z","avatar_url":"https://github.com/BjornMelin.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple PDF Merger\n\nA modern, user-friendly web application for merging PDF files with a clean and intuitive interface. Built with Next.js, TypeScript, and Tailwind CSS.\n\n[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)\n[![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](CONTRIBUTING.md)\n![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript\u0026logoColor=white)\n[![React](https://img.shields.io/badge/React-19_RC-blue?logo=react)](https://react.dev)\n[![Next.js](https://img.shields.io/badge/Next.js-15-black?logo=next.js)](https://nextjs.org/)\n[![GitHub](https://img.shields.io/badge/GitHub-BjornMelin-181717?logo=github)](https://github.com/BjornMelin)\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-Bjorn%20Melin-0077B5?logo=linkedin)](https://www.linkedin.com/in/bjorn-melin/)\n\n\u003c!-- ![Simple PDF Merger Screenshot](./public/screenshot.png) --\u003e\n\n## 📚 Quick Links\n\n- [🌟 Features](#-features)\n  - [Core Application Features](#core-application-features)\n  - [Modern Tech Features](#modern-tech-features)\n- [Live Demo](#live-demo)\n- [🛠️ Tech Stack](#️-tech-stack)\n- [📁 Project Structure](#-project-structure)\n- [🚀 Getting Started](#-getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n- [Development](#development)\n  - [Type Checking](#type-checking)\n  - [Linting](#linting)\n  - [Building for Production](#building-for-production)\n- [Deployment](#deployment)\n  - [Deploy to Vercel](#deploy-to-vercel)\n  - [Manual Deployment](#manual-deployment)\n- [Troubleshooting](#troubleshooting)\n- [Visual Representation](#visual-representation)\n- [Contributing](#contributing)\n- [👨‍💻 Author](#-author)\n- [📜 License](#-license)\n- [🌟 Star History](#-star-history)\n- [🙏 Acknowledgments](#-acknowledgments)\n\n## 🌟 Features\n\n### Core Application Features\n\n- 📎 **Drag and Drop PDF Files**: Easily add files by dragging and dropping them into the application.\n- 📋 **Reorder Files Before Merging**: Arrange the order of your PDF files before merging them.\n- 🔄 **Simple and Intuitive Interface**: User-friendly design for a seamless experience.\n- 📱 **Responsive Design**: Optimized for all devices, including mobile and tablets.\n- 🎯 **File Size Display**: View the size of each PDF file before merging.\n- 🗑️ **Easy File Removal**: Quickly remove unwanted files from the list.\n- ⚡ **Fast and Efficient**: Merge PDF files quickly with high performance.\n- 📱 **Modern Frontend**: Next.js with Tailwind CSS for a sleek and modern look.\n- 🛠️ **TypeScript Support**: Strongly typed codebase for improved maintainability.\n- 📦 **Component Library**: Utilizes shadcn/ui components for a consistent design.\n- 🚀 **Deploy with Vercel**: Easily deploy to Vercel with a single click.\n\n### Modern Tech Features\n\n- ⚡ **React 19 RC Integration**\n\n  - Document Metadata API\n  - Asset Loading API\n  - Progressive Loading\n  - Optimization Compiler\n\n- 🚀 **Next.js 15 App Router**\n\n  - Server Components\n  - Partial Prerendering\n  - Parallel Routes\n  - Edge Runtime\n\n- 🔄 **Full-Stack Type Safety**\n\n  - End-to-end typesafe APIs with tRPC\n  - Runtime validation\n  - Strict TypeScript\n  - Comprehensive error handling\n\n- ⚡ **Performance First**\n\n  - Edge deployment\n  - Streaming SSR\n  - Smart bundling\n  - Optimal caching\n\n## Live Demo\n\n[Visit Simple PDF Merger](https://simple-pdf-merger.vercel.app)\n\n## 🛠️ Tech Stack\n\n- **Framework**: Next.js\n- **Language**: TypeScript\n- **Styling**: Tailwind CSS\n- **Components**: shadcn/ui\n\n## 📁 Project Structure\n\n```plaintext\nsimple-pdf-merger/\n├── .eslintrc.json\n├── .gitignore\n├── .husky/\n│   ├── _/...\n│   ├── commit-msg\n├── .vscode/\n│   ├── settings.json\n├── app/\n│   ├── fonts/\n│   ├── globals.css            # Global styles\n│   ├── layout.tsx             # Root layout with metadata\n│   └── page.tsx               # Home page\n├── commitlint.config.js\n├── components/\n│   └── ui/                    # shadcn/ui components\n│       ├── button.tsx\n│       └── card.tsx\n│       └── PDFMerger.tsx      # Main PDF merger component\n├── components.json\n├── lib/\n│   └── utils.ts               # Utility functions\n├── next-env.d.ts\n├── next.config.ts\n├── package.json\n├── pnpm-lock.yaml\n├── postcss.config.mjs\n├── public/\n│   └── screenshot.png         # App screenshot\n├── README.md\n├── tailwind.config.ts\n├── tsconfig.json\n├── types/\n│   ├── api.ts                 # API type definitions\n│   ├── components.ts          # Component type definitions\n│   ├── events.ts              # Event type definitions\n│   ├── index.ts               # Main type exports\n│   ├── pdf.ts                 # PDF type definitions\n│   └── utils.ts               # Utility type definitions\n```\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js 18.17 or later\n- pnpm (recommended), npm, or yarn\n\n### Installation\n\n1. Clone the repository:\n\n    ```bash\n    git clone https://github.com/BjornMelin/simple-pdf-merger.git\n    cd simple-pdf-merger\n    ```\n\n2. Install `pnpm` if you don't have it:\n\n    ```bash\n    npm install -g pnpm\n    ```\n\n3. Install dependencies:\n\n    ```bash\n    pnpm install\n    ```\n\n4. Set up shadcn/ui components:\n\n    ```bash\n    pnpm dlx shadcn@latest init\n    ```\n\n    Choose the following options when prompted:\n\n    - TypeScript: Yes\n    - Style: Default\n    - Base color: Slate\n    - Global CSS: [globals.css](http://_vscodecontentref_/2)\n    - CSS variables: Yes\n    - tailwind.config.js location: tailwind.config.js\n    - Components import alias: @/components\n    - Utilities import alias: @/lib/utils\n\n5. Install required shadcn/ui components:\n\n    ```bash\n    pnpm dlx shadcn@latest add card button\n    ```\n\n6. Run the development server:\n\n    ```bash\n    pnpm run dev\n    ```\n\n7. Open [http://localhost:3000](http://localhost:3000) in your browser.\n\n## Development\n\n### Type Checking\n\n```bash\nnpm run type-check\n```\n\n### Linting\n\n```bash\nnpm run lint\n```\n\n### Building for Production\n\n```bash\nnpm run build\n```\n\n## Deployment\n\n### Deploy to Vercel\n\n1. Push your code to GitHub\n2. Go to [Vercel](https://vercel.com)\n3. Import your repository\n4. Deploy\n\n### Manual Deployment\n\nBuild the application:\n\n```bash\nnpm run build\n```\n\nThe build output will be in the `.next` directory.\n\n## Troubleshooting\n\nIf you encounter the error `'pnpm' is not recognized as an internal or external command, operable program or batch file`, follow these steps:\n\n1. **Ensure Node.js and npm are installed**:\n    - Download and install Node.js from [nodejs.org](https://nodejs.org/).\n    - Verify the installation:\n\n      ```bash\n      node -v\n      npm -v\n      ```\n\n2. **Install `pnpm` globally**:\n    - Run the following command to install `pnpm`:\n\n      ```bash\n      npm install -g pnpm\n      ```\n\n3. **Verify `pnpm` installation**:\n    - Check the `pnpm` version:\n\n      ```bash\n      pnpm -v\n      ```\n\n4. **Run the command again**:\n    - Use `pnpm dlx` to ensure the latest version is used:\n\n      ```bash\n      pnpm dlx shadcn@latest init\n      ```\n\n## Visual Representation\n\n```mermaid\ngraph TD;\n    A[Install Node.js and npm] --\u003e B[Install pnpm globally];\n    B --\u003e C[Clone the repository];\n    C --\u003e D[Install dependencies];\n    D --\u003e E[Initialize shadcn/ui];\n    E --\u003e F[Install required components];\n    F --\u003e G[Run development server];\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 👨‍💻 Author\n\n### Bjorn Melin\n\n[![AWS Certified Solutions Architect](https://images.credly.com/size/110x110/images/0e284c3f-5164-4b21-8660-0d84737941bc/image.png)](https://www.credly.com/org/amazon-web-services/badge/aws-certified-solutions-architect-associate)\n[![AWS Certified Developer](https://images.credly.com/size/110x110/images/b9feab85-1a43-4f6c-99a5-631b88d5461b/image.png)](https://www.credly.com/org/amazon-web-services/badge/aws-certified-developer-associate)\n[![AWS Certified AI Practitioner](https://images.credly.com/size/110x110/images/4d4693bb-530e-4bca-9327-de07f3aa2348/image.png)](https://www.credly.com/org/amazon-web-services/badge/aws-certified-ai-practitioner)\n[![AWS Certified Cloud Practitioner](https://images.credly.com/size/110x110/images/00634f82-b07f-4bbd-a6bb-53de397fc3a6/image.png)](https://www.credly.com/org/amazon-web-services/badge/aws-certified-cloud-practitioner)\n\nAWS-certified Solutions Architect and Developer with expertise in cloud architecture and modern development practices. Connect with me on:\n\n- [GitHub](https://github.com/BjornMelin)\n- [LinkedIn](https://www.linkedin.com/in/bjorn-melin/)\n\nProject Link: [https://github.com/BjornMelin/simple-pdf-merger](https://github.com/BjornMelin/simple-pdf-merger)\n\n## 📜 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🌟 Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=bjornmelin/simple-pdf-merger\u0026type=Date)](https://star-history.com/#bjornmelin/simple-pdf-merger\u0026Date)\n\n## 🙏 Acknowledgments\n\n- [Next.js](https://nextjs.org/)\n- [Tailwind CSS](https://tailwindcss.com/)\n- [shadcn/ui](https://ui.shadcn.com/)\n- [Lucide Icons](https://lucide.dev/)\n\n\u003cdiv align=\"center\"\u003e\n    \u003cstrong\u003eBuilt with React 19 RC + Next.js 15 by Bjorn Melin\u003c/strong\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjornmelin%2Fsimple-pdf-merger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbjornmelin%2Fsimple-pdf-merger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjornmelin%2Fsimple-pdf-merger/lists"}