Share documents instantly with QR codes - Upload, generate, and share documents seamlessly with anyone, anywhere.
π Instant Upload - Drag & drop or click to upload PDF, DOC, and DOCX files
π± QR Code Generation - Automatically generates scannable QR codes for each document
βοΈ Cloud Storage - Secure file storage with global CDN distribution
π₯ Direct Download - QR codes link directly to downloadable files
π¨ Modern UI - Clean, responsive design with smooth animations
β‘ Lightning Fast - Frontend-only architecture for maximum performance
- Vue 3 - Progressive JavaScript framework with Composition API
- TypeScript - Type-safe development experience
- Vite - Next-generation frontend build tool
- Tailwind CSS - Utility-first CSS framework
- Vue Router - Official routing library for Vue.js
- Supabase - Open-source Firebase alternative
- Supabase Storage - Scalable file storage with CDN
- QRCode.js - QR code generation library
- QRCode Vue3 - Vue 3 QR code component
- Heroicons - Beautiful hand-crafted SVG icons
- AOS - Animate On Scroll library
- UUID - Unique identifier generation
- Node.js 18+
- pnpm (recommended) or npm
-
Clone the repository
git clone https://github.com/yourusername/qr-doc-share.git cd qr-doc-share -
Install dependencies
pnpm install
-
Set up Supabase
- Create a new project at supabase.com
- Create a storage bucket named
documents - Make the bucket public
- Add storage policies for public read/write access
-
Configure environment variables
cp .env.example .env
Update
.envwith your Supabase credentials:VITE_SUPABASE_URL=your_supabase_project_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
-
Start development server
pnpm dev
-
Open your browser
http://localhost:5173
graph LR
A[Select File] --> B[Validate File]
B --> C[Upload to Supabase]
C --> D[Generate QR Code]
D --> E[Display Results]
- User uploads document (PDF, DOC, DOCX)
- File is stored securely in Supabase Storage
- QR code is generated with direct download link
- Anyone can scan QR code to download the file instantly
- π PDF - Portable Document Format
- π DOC - Microsoft Word Document (Legacy)
- π DOCX - Microsoft Word Document (Modern)
- π Size Limit - Up to 10MB per file
qr-doc-share/
βββ src/
β βββ components/ # Reusable Vue components
β βββ views/ # Page components
β β βββ Home.vue # Landing page
β β βββ Upload.vue # File upload interface
β β βββ Download.vue # Download page
β βββ services/ # API and business logic
β β βββ DocumentService.ts
β βββ router/ # Vue Router configuration
β βββ assets/ # Static assets
βββ public/ # Public static files
βββ package.json # Dependencies and scripts
Clean, intuitive drag-and-drop interface with real-time progress tracking.
Instantly generated QR codes with high-resolution download options.
Fully responsive design that works perfectly on desktop, tablet, and mobile devices.
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel# Build the project
pnpm build
# Deploy dist/ folder to Netlify# Build for production
pnpm build
# Deploy the dist/ folder to any static hosting service-
Create Storage Bucket
-- Create bucket INSERT INTO storage.buckets (id, name, public) VALUES ('documents', 'documents', true);
-
Set Storage Policies
-- Allow public uploads CREATE POLICY "Allow public uploads" ON storage.objects FOR INSERT TO public WITH CHECK (bucket_id = 'documents'); -- Allow public reads CREATE POLICY "Allow public reads" ON storage.objects FOR SELECT TO public USING (bucket_id = 'documents');
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Vue.js - The progressive JavaScript framework
- Supabase - Open-source Firebase alternative
- Tailwind CSS - Utility-first CSS framework
- Heroicons - Beautiful SVG icons
Made with β€οΈ and Vue.js
β Star this repo if you found it helpful!