A web application optimized for iPad that allows users to create annotated printable sheets for instructions or specifications.
- Take photos using device camera or upload existing images
- Photos auto-arrange on a landscape-oriented paper (A4/Letter/Legal)
- Drag and resize photos on the canvas
- Multiple photos supported per sheet
- Arrow - Draw directional arrows with arrowheads
- Circle - Create circular markers/highlights
- Line - Draw straight lines
- Rectangle - Draw rectangular boundaries
- Text - Add text labels with customizable font size
- Freehand - Draw freely with stylus or finger
- Customizable colors (10 preset colors)
- Adjustable stroke width (1-10px)
- Record voice memos describing instructions
- Real-time speech-to-text transcription (Web Speech API)
- Convert transcriptions directly to text annotations
- Works on supported browsers (Chrome, Safari, Edge)
- Integrates with OpenAI GPT API
- Analyzes your annotations and photos
- Suggests improvements for clarity and professionalism
- One-click to add suggestions as annotations
- Export as landscape-oriented PDF
- Configurable quality (72/150/300 DPI)
- Automatic filename with title and date
- Professional header with title, creator, and date
- Service worker caches app for offline use
- Camera and basic editing work offline
- AI features require internet connection
Simply open index.html in a modern browser. Note that camera access requires HTTPS or localhost.
# Using Python 3
python -m http.server 8000
# Using Node.js
npx serve .
# Using PHP
php -S localhost:8000Then open http://localhost:8000 in your browser.
- Create a new GitHub repository
- Upload
index.htmlandsw.js - Go to Settings > Pages
- Select main branch and save
- Access at
https://yourusername.github.io/repo-name
- Drag and drop the folder to Netlify Drop
- Or connect your GitHub repository
npm i -g vercel
vercelUpload index.html and sw.js to any static hosting service:
- AWS S3 + CloudFront
- Firebase Hosting
- Cloudflare Pages
- DigitalOcean App Platform
Required only for AI-powered suggestions feature.
- Go to console.anthropic.com
- Create an account and add payment method
- Generate an API key (starts with
sk-ant-) - Enter the key in Settings within the app
Note: The API key is stored locally in your browser and is sent directly to Anthropic's servers. Never share your API key publicly.
Uses the browser's built-in Web Speech API - no API key required.
- Works best in Chrome and Safari
- Requires microphone permission
| Feature | Chrome | Safari (iPad) | Firefox | Edge |
|---|---|---|---|---|
| Core App | ✅ | ✅ | ✅ | ✅ |
| Camera | ✅ | ✅ | ✅ | ✅ |
| Speech Recognition | ✅ | ✅ | ❌ | ✅ |
| PDF Export | ✅ | ✅ | ✅ | ✅ |
| Service Worker | ✅ | ✅ | ✅ | ✅ |
- Large touch-friendly buttons (minimum 44px)
- Responsive layout adapts to screen size
- Supports Apple Pencil for precise annotations
- "Add to Home Screen" creates standalone app experience
- Optimized for landscape orientation
- Taking Photos: Use the Camera button or Upload to add photos
- Annotating: Select a tool, then draw on the canvas
- Voice Memos: Tap the microphone and speak clearly
- Moving Objects: Use Select tool to move/resize elements
- Deleting: Select objects and tap Delete or use keyboard
- Preview: See how your sheet will look when printed
- Export: Generate a high-quality PDF for printing
| Shortcut | Action |
|---|---|
| Delete/Backspace | Delete selected objects |
| Escape | Deselect / Close modals |
| Ctrl/Cmd + S | Export PDF |
spec-sheet-app/
├── index.html # Main application (self-contained)
├── sw.js # Service worker for offline support
└── README.md # This file
- Fabric.js - Canvas-based drawing and object manipulation
- jsPDF - PDF generation
- html2canvas - Canvas capture for PDF export
- Web Speech API - Voice recording and transcription
- Service Workers - Offline capability
- OpenAI GPT API - AI-powered suggestions
MIT License - Feel free to modify and use for your projects.
- Ensure HTTPS or localhost
- Grant camera permission when prompted
- Try refreshing the page
- Use Chrome or Safari
- Grant microphone permission
- Check that Web Speech API is supported
- Allow pop-ups if download is blocked
- Try lower quality setting for large documents
- Ensure all images have loaded before exporting
- Verify your OpenAI API key is correct
- Check your API key has available credits
- Ensure internet connection is active