QuickDrop is an anonymous, no-login sharing web app for text and files with custom slug links and optional lock/unlock access control.
Live URL: https://quickdrop.cloud/
- Product Overview
- Key Features
- Tech Stack
- Architecture
- Frontend Flow
- Project Structure
- API Contract Used by Frontend
- Local Development
- Environment Variables
- Build and Run
- Quality and Engineering Standards
- Security and Privacy Notes
- Deployment Notes
- Known Gaps and Improvement Backlog
QuickDrop allows users to:
- Create a custom slug from the home page.
- Open a dedicated slug workspace page.
- Write and save text content.
- Upload, list, download, and delete files.
- Lock/unlock pages with password verification.
- Share temporary links with expiry controlled from the home page.
No user registration is required.
- Anonymous usage without accounts.
- Custom URL creation through slug generation.
- Combined text editor + file vault on each slug page.
- Password-gated edit/download operations when locked.
- Expiration duration selector (1 hour to 7 days).
- Responsive UI with interaction feedback and toasts.
- Framework: Next.js 16 (App Router)
- Language: JavaScript (React 19)
- Styling: Tailwind CSS v4 + component-level styled-jsx blocks
- HTTP Client: Axios (+ native fetch in home page slug creation)
- Icons: lucide-react
- Linting: ESLint 9 + eslint-config-next
flowchart TD
U[Browser User] --> N[Next.js Frontend]
N -->|POST /api/slugs/create| B[QuickDrop Backend API]
N -->|GET /files/:slug/info| B
N -->|POST /text/:slug/save| B
N -->|GET /text/:slug| B
N -->|POST /files/upload| B
N -->|GET /files/download/:id| B
N -->|DELETE /files/:id| B
N -->|POST lock/unlock/verify-password| B
B --> DB[(Data Store + File Storage)]
/: Landing + slug creation + expiration selection./[slug]: Shared workspace for text and file operations./about: Product information./terms: Terms and conditions.
app/page.js- Slug input normalization.
- Expiration selection and slug creation request.
- Link copy helper.
app/[slug]/page.js- Workspace state orchestration.
- Page lock/unlock and password verification flow.
- Text CRUD and file upload/download/delete behavior.
lib/api.js- Axios client wrapper and frontend API methods.
- User enters desired slug on
/. - Frontend normalizes slug and calls backend create endpoint.
- On success, user is navigated to
/{slug}. - Slug page fetches metadata + existing text + files.
- User performs save/upload/download/delete operations.
- If page is locked, password verification is required before protected actions.
app/
layout.js # Root layout + metadata
globals.css # Global styles + Tailwind import
page.js # Landing page
[slug]/page.js # Slug workspace page
about/page.js # About page
terms/page.js # Terms page
lib/
api.js # API client layer
public/ # Static assets
Configured in lib/api.js with:
- Base URL from
NEXT_PUBLIC_API_URL - Fallback:
http://localhost:5000/api
Methods used:
GET /slugs/check/:slugPOST /slugs/createGET /files/:slug/infoPOST /files/uploadGET /files/download/:idDELETE /files/:idPOST /files/:slug/lockPOST /files/:slug/unlockPOST /files/:slug/verify-passwordPOST /text/:slug/saveGET /text/:slug
- Node.js 20+
- npm 10+
- Backend API running and reachable
npm installnpm run devCreate .env.local in the frontend root:
NEXT_PUBLIC_API_URL=http://localhost:5000/apiFor production, point it to your backend API base URL.
npm run lint
npm run build
npm startThis project currently follows:
- App Router based route separation.
- API abstraction in
lib/api.js. - Strict mode enabled in Next config.
- ESLint integration for code quality.
Recommended industry-standard additions (next steps):
- Add TypeScript for safer API contracts and state models.
- Add centralized error boundary + loading UI patterns.
- Add unit/integration tests (Jest + RTL) and E2E tests (Playwright).
- Add API retry/timeout policies and standardized error mapping.
- Add observability (frontend logs, tracing, analytics events).
- Add CI pipeline with lint/test/build gates and preview deployments.
- This frontend supports password-protected pages through backend verification endpoints.
- Frontend must not store plaintext passwords in persistent storage.
- Always use HTTPS in production for API and site.
- Validate and sanitize user-provided content on backend before persistence.
- Add rate-limiting and abuse controls at API/gateway level.
- Framework supports deployment to Vercel, Azure Static Web Apps, or containerized hosting.
- Ensure
NEXT_PUBLIC_API_URLpoints to production backend. - Keep backend CORS configuration aligned with frontend origin.
- Keep route fallback and CDN cache settings compatible with App Router.
- Home page currently uses direct
fetchwith a hardcoded backend URL for slug creation; this should be centralized throughlib/api.jsand env-based config. - Some UI copy still references legacy product naming in static pages.
- Add accessibility audit for keyboard and screen reader support across modals.
- Add request cancellation for long-running uploads and page transitions.
Maintained by QuickDrop team.