InvoicePrinter is a Ruby library for generating PDF invoices, with additional CLI and HTTP server interfaces. It takes structured invoice data (as Ruby objects or JSON) and generates formatted PDF documents using the Prawn library. The system consists of three main components: the core library for PDF generation, a command-line executable for direct use, and a server executable providing a HTTP API. The architecture shows good separation of concerns with distinct modules for data models, PDF rendering, font handling, and server interface.
EasyInvoicePDF is a free, open-source, browser-based invoice generator that creates PDF invoices with live preview, no sign-up required, and no ads. Built with Next.js (App Router), React 19, TypeScript, Tailwind CSS, and shadcn/ui, it runs entirely client-side for the public editor—invoice data stays in localStorage and is never uploaded to a server. The application supports 10 languages, 120+ currencies, two PDF templates (default and Stripe-inspired), QR codes, multi-page PDFs, and shareable compressed URLs. A private server-side API (Bearer token + Upstash rate-limited) handles monthly recurring invoice generation via Trigger.dev cron, uploading PDFs to Google Drive, emailing via Resend, and sending Telegram notifications. The codebase also includes extensive SEO landing pages, a changelog, a founder page, and comprehensive testing (Vitest unit tests, Playwright e2e with PDF screenshot baselines). Architecture: The app uses two root layouts—unprefixed English-only routes (/) and locale-prefixed routes (/[locale]) for i18n via next-intl. The main invoice form is a large client component with react-hook-form and Zod validation, debounced autosave, and template/language switching. PDF rendering uses @react-pdf/renderer on the client for live preview and on the server for automation. External dependencies include Upstash Redis (rate limiting, queue), Resend (email), Google Drive (archive), Telegram (notifications), Sentry (error tracking), Umami (analytics), and Trigger.dev (scheduled tasks). The repository also contains a rich ecosystem of agent skills (Vercel React best practices, composition patterns, SEO audit, etc.) used in development workflows. Key data flows: User fills form → state stored in localStorage and optionally shared via compressed URL → PDF preview rendered client-side via @react-pdf/renderer → download or share. For monthly automation: Trigger.dev cron triggers server-side PDF generation → upload to Google Drive → email via Resend → Telegram notification. The backend API also supports a preview endpoint for sample PDFs and a Telegram webhook for on-demand generation.