A web application for creating and customizing printable banners, built with React, TypeScript, and Tailwind CSS.
- π¨ Template System: Choose from pre-built templates like "Welcome Home", "Congratulations", and "Happy Birthday"
- βοΈ Text Customization: Edit text, change fonts, colors, sizes, and positioning
- π¨οΈ Ink Saver Mode: Optional outline-only rendering to save printer ink
- π Multi-page Support: Create banners that span multiple landscape pages
- π PDF Generation: Download high-quality PDFs ready for printing with precise cross-page positioning (powered by jsPDF v3)
- ποΈ PDF Preview: Preview your banner PDF before downloading
- π±π§ Responsive Design: Works on desktop and tablet devices (mobile phones are not targeted)
- Bun (>=1.0.0, required)
- A modern web browser (Chrome, Safari, Firefox)
Note: Node.js compatibility is best-effort, but Bun is required for full support and all scripts.
-
Clone the repository:
git clone <repository-url> cd printable-banners
-
Install dependencies:
bun install
-
Start the development server:
bun run dev
-
Open your browser and navigate to
http://localhost:3000
src/
βββ core/ # Core business logic
β βββ banner/ # Banner model and utilities
β βββ template/ # Template system
βββ components/ # React UI components
β βββ editor/ # Banner editing interface
β βββ templates/ # Template selection
β βββ ui/ # Reusable UI components
βββ hooks/ # Custom React hooks
βββ utils/ # Utility functions
tests/
βββ unit/ # Unit tests for core logic
βββ integration/ # Component integration tests
βββ e2e/ # End-to-end tests (Playwright)
- Choose a Template: Select from available templates or start with a blank banner
- Add Text: Use the text input to add new text elements
- Customize: Select text elements to edit their properties:
- Text content
- Font size and family
- Color
- Position and rotation
- Preview: See real-time preview of your banner
- Print: Use the print function to output your banner across multiple pages
Toggle "Ink Saver Mode" to render text as outlines instead of filled text. This:
- Reduces ink consumption
- Speeds up printing
- Can create an appealing aesthetic effect
Banners are designed to be printed in landscape orientation on standard paper sizes (8.5"Γ11" by default). For larger banners:
- Print all pages
- Arrange pages in order
- Tape or glue pages together to form the complete banner
# Run all unit tests
bun test
# Run tests in watch mode
bun test --watch
# Run E2E tests (Playwright v1.54)
bun run test:e2e
bun run build
# Lint code
bun run lint
# Format code
bun run format
- Frontend: React 19.1 with TypeScript 5
- Styling: Tailwind CSS 4.1
- Build Tool: Vite 7
- Runtime: Bun (>=1.0.0, Node.js compatibility best-effort)
- PDF Generation: jsPDF 3
- Testing: Bun test (unit), Playwright 1.54 (E2E)
- Primary: Chrome (full support, desktop and tablet)
- Secondary: Safari (best-effort compatibility, desktop and tablet)
- Note: Mobile phone browsers are not targeted or officially supported
- Modern browser features are used with progressive enhancement
We welcome contributions! Please see our Contributing Guidelines for details on:
- Development workflow
- Code standards
- Pull request process
- Project philosophy
Quick start for contributors:
- Fork the repository
- Create a feature branch:
git checkout -b feature/new-feature
- Make your changes and add tests
- Run tests:
bun test && bun run test:e2e
- Submit a pull request
For bug reports and feature requests, please use our GitHub Issues.
- Basic banner model and text rendering
- Core template system
- Simple UI with text editing
- Cross-page text positioning
- Print preview functionality
- Font scaling and page calculation
- Smart text sizing and positioning
- Print positioning optimization
- PDF export functionality with precise cross-page positioning
- PDF preview functionality
- PDF buffer generation for advanced use cases
- Enhanced font selection system with 17+ system fonts
- Font categorization (Serif, Sans Serif, Display, Handwriting, Monospace)
- Font detection and fallback system
- Improved font preview in editor
- Basic decorative elements (borders and emojis)
- Enhanced templates with decorative elements
- Advanced decorative elements (flowers, borders)
- Custom page size configuration
- Print optimization enhancements
This project is licensed under the MIT License - see the LICENSE file for details.
- Built following minimal core architecture principles
- Designed for extensibility and maintainability
- Focused on user experience and accessibility