Resume Share - Version-Controlled Resume Sharing Platform
Documents a full-stack web app for uploading, versioning, and sharing PDF resumes with public links and view tracking.
What this file does
Documents a full-stack web app for uploading, versioning, and sharing PDF resumes with public links and view tracking.
When to use it
- Planning a resume-sharing or document-versioning web app
- Evaluating a React + Express + PostgreSQL project architecture
- Learning how to structure file uploads with version history
- Need a reference for short URL generation and analytics recording
Assumes this stack
Resume Share - Version-Controlled Resume Sharing Platform
Overview
This is a modern, responsive web application for sharing and version-controlling PDF resumes. Users can upload multiple versions of their resumes, generate shareable public links, and track usage statistics. The app is built with React frontend, Express.js backend, and uses PostgreSQL with Drizzle ORM for data persistence.
System Architecture
Frontend Architecture
- Framework: React with TypeScript
- UI Library: shadcn/ui components with Radix UI primitives
- Styling: Tailwind CSS with CSS variables for theming
- State Management: TanStack Query for server state management
- Routing: Wouter for lightweight client-side routing
- Form Handling: React Hook Form with Zod validation
- Build Tool: Vite with hot module replacement
Backend Architecture
- Runtime: Node.js with Express.js framework
- Language: TypeScript with ES modules
- File Uploads: Multer middleware for handling PDF files
- Database: PostgreSQL with Drizzle ORM
- Session Management: Express sessions with PostgreSQL store
- Deployment: Optimized for Replit with autoscale deployment
Key Components
Database Schema
The application uses three main tables:
- resumes: Stores resume metadata (name, short URL, timestamps)
- resume_versions: Tracks multiple versions of each resume with file information
- resume_views: Analytics tracking for public resume views
File Storage
- Files are stored locally in the
uploads/directory - PDF validation ensures only PDF files are accepted
- 10MB file size limit for uploads
- File naming includes version numbers for organization
URL Generation
- Short URLs are generated using 6-character random strings
- Pattern:
/r/{shortUrl}for public resume viewing - URLs are guaranteed to be unique through database constraints
Data Flow
Upload Process
- User selects PDF file and provides resume name
- File validation occurs (PDF type, size limits)
- File is saved to local storage with unique filename
- Database records are created for resume and version
- Short URL is generated and returned to user
Public Viewing
- User visits
/r/{shortUrl}public link - System looks up resume by short URL
- Latest version is retrieved from database
- PDF file is served with download option
- View analytics are recorded (IP, user agent, timestamp)
Version Management
- Users can upload new versions to existing resumes
- Previous versions remain accessible through version history
- Latest version is automatically marked and served publicly
- Users can promote any version to be the current latest
External Dependencies
Core Dependencies
- @neondatabase/serverless: PostgreSQL database driver
- drizzle-orm: Type-safe ORM for database operations
- multer: File upload handling middleware
- express: Web application framework
- react: Frontend framework
- @tanstack/react-query: Server state management
UI Components
- @radix-ui/*: Accessible UI primitive components
- tailwindcss: Utility-first CSS framework
- class-variance-authority: Component variant styling
- react-hook-form: Form handling and validation
Development Tools
- vite: Build tool and development server
- typescript: Type safety and development experience
- drizzle-kit: Database migration and schema management
Deployment Strategy
Development Environment
- Replit Integration: Configured for Replit development environment
- Hot Reload: Vite provides instant updates during development
- Database: PostgreSQL 16 module enabled in Replit
- Port Configuration: Application runs on port 5000
Production Build
- Build Process: Vite builds frontend assets, esbuild bundles backend
- Asset Optimization: Static assets are optimized and served efficiently
- Environment Variables: DATABASE_URL required for PostgreSQL connection
- Autoscale Deployment: Configured for Replit's autoscale infrastructure
File Organization
├── client/ # React frontend application
├── server/ # Express.js backend application
├── shared/ # Shared TypeScript types and schemas
├── uploads/ # Local file storage for PDFs
└── migrations/ # Database migration files
Recent Changes
- June 24, 2025: Created beautiful modern landing page with professional design
- June 24, 2025: Implemented Google authentication using Replit Auth
- June 24, 2025: Set up PostgreSQL database with user management
- June 24, 2025: Added protected dashboard with user-specific resume management
- June 24, 2025: Created comprehensive local setup and Vercel deployment guide
Changelog
- June 24, 2025. Initial setup with resume sharing and version control
User Preferences
Preferred communication style: Simple, everyday language. UI Requirements: Professional PDF viewer with zoom controls and responsive design. Deployment: Interested in local development setup and Vercel deployment.
Local Development & Deployment
- Complete setup guide created in LOCAL_SETUP.md
- Vercel configuration files prepared
- Environment variable templates provided
- Database setup instructions for both local and production
What's inside
6 major sections covering architecture, components, data flow, dependencies, deployment, and changelog.
Change this for your project
- Replace
Shubham185y/Resume-Sharerwith your own repository name - Replace
uploads/directory path if you use cloud storage instead of local files - Replace
DATABASE_URLenvironment variable name if your provider uses a different key
Where it goes
Keep it in your repository where the agent or team that needs it will read it.
Worth borrowing
- Short URL generation using 6-character random strings with uniqueness constraints
- Version management that keeps all previous versions accessible and allows promoting any version to latest
- View analytics recording IP, user agent, and timestamp for each public resume access
Related Documents
GOOBY - Closing Store Marketplace
Defines a full-stack marketplace app for discovering closing retail stores in NY/NJ/CT/PA, with automated closure scanning and admin review.
Lua Code Obfuscator/Deobfuscator
Provides a full-stack web app for obfuscating and deobfuscating Roblox Lua scripts with a Monaco editor and PostgreSQL storage.
GREEN NODE - Project Overview
Describes a full-stack recycling platform with three runtime modes, provider architecture, and development scripts for Cochabamba, Bolivia.
ADN Systems DMR Peer Server
Documents a forked FreeDMR server for amateur radio DMR voice/data routing with bridges, proxies, scheduled voice announcements, and centralized security.