☁️ R2 Cloud Storage New Feature!

Zero egress fees, unlimited bandwidthβ€”automatic PDF cloud storage just implemented!

πŸŽ‰ NEW: Automatic PDF Cloud Storage

ProposalForge now automatically uploads every generated PDF to Cloudflare R2 cloud storage! Your proposals are permanently stored in the cloud with shareable URLs, while you still get instant local downloads. This feature was just implemented to make proposal sharing seamless and cost-free.

S3-Compatible Object Storage, Reimagined

Cloudflare R2 is object storage without the egress fees. It's S3-compatible, globally distributed, and designed for the modern web. ProposalForge leverages R2 to provide permanent cloud storage for all generated PDFsβ€”completely free thanks to zero egress charges.

Why R2 is Revolutionary

πŸ’° Zero Egress Fees

Unlike AWS S3, serving files from R2 is completely free. No surprise bills for bandwidth usage.

πŸ”— S3 API Compatible

Drop-in replacement for S3. Use existing S3 SDKs, tools, and workflows without changes.

🌍 Global Distribution

Files automatically replicated across Cloudflare's global network for fast access worldwide.

⚑ Edge Integration

Direct integration with Workers. Upload and serve files without leaving the edge network.

πŸ”’ Enterprise Security

11 nines of durability (99.999999999%). Your files are safer than on local storage.

πŸ’š Generous Free Tier

10GB storage freeβ€”enough for thousands of proposal PDFsβ€”plus unlimited downloads.

How ProposalForge Uses R2 Just Implemented!

When you generate a PDF in ProposalForge, here's what happens behind the scenes:

Generate PDF
β†’
Download Locally
β†’
Upload to R2
β†’
Save URL to D1
β†’
Get Shareable Link

Upload Implementation

ProposalForge uploads PDFs to R2 using a Cloudflare Worker API endpoint:

// Client-side: Send PDF to Worker for R2 upload async function uploadPdfToCloud(pdfBlob, filename) { const formData = new FormData(); formData.append('file', pdfBlob, filename); const response = await fetch('/api/upload-pdf', { method: 'POST', body: formData }); const { url, success } = await response.json(); return url; } // Worker: Upload to R2 export async function onRequestPost({ request, env }) { const formData = await request.formData(); const file = formData.get('file'); // Generate organized path: proposals/YYYY/MM/filename.pdf const date = new Date(); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const key = `proposals/${year}/${month}/${file.name}`; // Upload to R2 await env.R2_BUCKET.put(key, file.stream(), { httpMetadata: { contentType: 'application/pdf' }, customMetadata: { uploadedAt: date.toISOString(), fileSize: String(file.size) } }); // Generate public URL const url = `https://cdn.example.com/${key}`; // Save to D1 database await env.DB.prepare(` INSERT INTO pdf_generations (filename, file_size, cloud_url) VALUES (?, ?, ?) `).bind(file.name, file.size, url).run(); return Response.json({ success: true, url }); }

File Organization Strategy

PDFs are automatically organized using a date-based folder structure:

This structure makes it easy to browse, archive, and manage thousands of proposals over time.

R2 Features in Action

πŸ”— Public URLs

Each PDF gets a permanent, shareable URL accessible from anywhere in the world.

πŸ“Š Metadata Tracking

Store custom metadata with each file: upload date, file size, original filename, proposal ID.

πŸ—‚οΈ Versioning

Keep multiple versions of the same proposal with R2's optional versioning feature.

πŸ” Access Control

Generate time-limited signed URLs for secure, temporary access to sensitive proposals.

Cost Comparison: R2 vs AWS S3

Serving 10,000 PDFs per month (average 250KB each):

πŸ’š Cloudflare R2

Storage: $0 (2.5GB < 10GB free tier)

Uploads: $0 (10,000 < free tier)

Downloads: $0 (no egress fees!)

Total: $0.00/month

πŸ”΄ AWS S3

Storage: $0.06 (2.5GB Γ— $0.023/GB)

Uploads: $0.05 (10,000 PUT requests)

Downloads: $225.00 (2.5GB Γ— $0.09/GB egress!)

Total: $225.06/month

Technical Specifications

Advanced Features Coming Soon

πŸ—œοΈ Automatic Compression

R2 can automatically compress PDFs before storage to reduce costs and improve delivery speed.

πŸ” Signed URLs

Generate time-limited URLs for secure proposal sharing with expiration dates.

πŸ“§ Email Integration

Email PDFs directly to clients using Cloudflare Email Workers with R2 attachments.

πŸ“Š Usage Analytics

Track how many times each PDF is viewed or downloaded using R2 access logs.

Security & Privacy

ProposalForge takes PDF security seriously:

Free Tier Limits

Why This Changes Everything

Before R2, storing and serving files had hidden costs:

Try the New PDF Cloud Storage

Generate a proposal and get instant cloud storage with shareable links

Create Your First PDF