Beautiful, personalized film call sheets powered by Craft and Gemini AI. Created with Google Antigravity and Claude Opus 4.5.
- Production Management - Select from multiple productions.
- Personalised Experience - Phone number matching for crew/cast personalisation. Uses phone number to authenticate for closed sets and before revealing contact details.
- Location Intelligence - Gemini-powered enrichment with emergency services, weather, and transport info.
- Privacy Controls - Closed set warnings and contact obscuring for unauthenticated users.
- Responsive Design - Premium UI optimized for mobile, tablet, and desktop.
- Simple Exports - Export call sheets as PDFs.
- Visit https://docs.40degree.media/callsheetcraft and duplicate the template into your Craft account.
- Add any relevant productions to the document (if applicable).
- Open the Imagine tab in Craft and create a new API connection.
- Choose the option to Connect Selected Documents.
- Open your new connection, click the purple Add Document button, and select the template you duplicated.
- In the connection settings, ensure that Permission Level is set to Read and Write, and change access from Public to API Key.
- Copy the API key from the connection settings. Keep note of this, it won't reappear.
npm installcp .env.example .envEdit .env and add your API details:
GEMINI_API_KEY=your_gemini_api_key_here
CRAFT_API_BASE=your_craft_api_base
CRAFT_API_KEY=your_craft_api_key_here- Get your Gemini API key from Google AI Studio
- Get your Craft API key from your Craft multi-document connection settings
npm run devOpen http://localhost:3000 in your browser.
# Build the image
docker build -t callsheetcraft .
# Run with environment variables
docker run -p [desired-port]:3000 \
-e GEMINI_API_KEY=your_gemini_key \
-e CRAFT_API_BASE=your_craft_api_base \
-e CRAFT_API_KEY=your_craft_key \
callsheetcraftThe server will run on the port under [desired-port]. I personally deploy this on my own infra and open it to public access via Cloudflare Tunnels.
CallSheetCraft/
├── server/
│ ├── index.js # Express server
│ ├── routes/api.js # API endpoints
│ └── services/
│ ├── craftService.js # Craft API integration
│ └── geminiService.js # Gemini AI with search grounding
├── public/
│ ├── index.html # Single-page application
│ ├── css/styles.css # Premium responsive styles
│ └── js/
│ ├── api.js # API client
│ ├── components.js # UI components
│ └── app.js # Application controller
├── .env.example # Environment template
├── .gitignore # Git exclusions
├── Dockerfile # Docker build
└── package.json # Dependencies
| Endpoint | Method | Description |
|---|---|---|
/api/productions |
GET | List all productions grouped by title |
/api/production/:id |
GET | Get production with auto-enrichment |
/api/production/:id/enrich |
POST | Force re-enrichment via Gemini |
/api/health |
GET | Health check |
MIT



