Implemented PreSignUp trigger to prevent OAuth account conflicts. If an email already exists via different auth method, users get a clear error message.
Complete account settings page. Users can change their password, update their name, and view account information. Full profile management.
Comprehensive authentication improvements. Better OAuth flow handling, cleaner error messages, and UI fixes. Authentication is now rock solid.
Users now have their sign-up method tracked (email, Google, or Apple). Useful for analytics, support, and understanding acquisition channels.
Sign in with Google and Apple is now available. 'Continue with Google' and 'Continue with Apple' buttons on login and signup pages. Reduced friction for new users.
Standardized button system across the dashboard. Consistent sizing, colors, and states. No more one-off button styles cluttering the CSS.
Centralized HTML generation to build time only. API no longer generates HTML - it stores raw markdown. Cleaner separation of concerns and consistent rendering.
New users now receive a welcome email after signing up. Onboarding begins with a friendly introduction to Jottings and next steps.
Implemented queue-based email system with Loops.so. Welcome emails, build failure notifications, and subscription updates. Professional transactional email.
Comprehensive design system documentation. Color tokens, typography, spacing, component patterns. A reference for maintaining visual consistency.
Added PRO badges throughout the dashboard. Sites and users with active subscriptions display a badge. Clear visual differentiation between tiers.
Dodopayments webhook endpoint implemented. Subscription events (created, updated, canceled) are processed in real-time to keep user status in sync.
Frontend subscription UI complete. Users can view their plan, upgrade to PRO, and manage billing from the dashboard. Clean, informative design.
Dodopayments Phase 2 complete: Subscription API endpoints. Create checkout sessions, manage subscriptions, and handle billing operations.
Phase 1 of payment integration: Infrastructure for Dodopayments. SDK client, utilities, and DynamoDB schema for subscriptions. Preparing for monetization.
iOS app Phase 6: Advanced features including build management and custom domains settings. Full feature coverage approaching.
iOS app Phases 2-4: Core UI implementation and jots management. Sites list, jots view, and jot creation. The app is taking shape.
Started building the native iOS app. Phase 1 complete: Foundation and authentication infrastructure with AWS Amplify. SwiftUI-based architecture.
First AI integration: Akuri AI writing assistant on the jot creation page. Get suggestions, expand ideas, and improve your writing with AI assistance.
Added comprehensive CloudWatch monitoring with dashboards and alarms. Lambda errors, API Gateway latency, DynamoDB throttles, and SQS queue depth are all tracked.
Migrated all AWS infrastructure from us-east-1 to us-east-2. Consolidating resources in a single region for better latency and cost management.
Generated sites now include a 'Built by Jottings' footer attribution. Minimal branding that links back to the platform. PRO users can remove it.
Added GitHub Actions workflow for Cloudflare Worker auto-deployment. Changes to the sites-router Worker are automatically deployed on push.
Custom domains feature is live! Connect your own domain (blog.example.com) to your Jottings site. TXT validation, automatic SSL, and global CDN delivery.
Frontend UI for custom domains. Users can add their domain, see DNS records to configure, and track verification status. Step-by-step guidance included.
Backend for custom domains is ready. Cloudflare SSL for SaaS integration, DynamoDB table for domain mappings, and API endpoints for adding/verifying domains.
Implemented GitHub-style OKLCH surface tinting system. Theme colors now subtly tint backgrounds and surfaces for a cohesive, modern look that respects light/dark mode.
Complete redesign of the site settings page. Continuous scroll instead of tabs, color palette picker, and better organization of all configuration options.
Sites can now have a theme color that tints the dashboard UI. Colors are auto-assigned based on site ID hash for consistency, or users can pick from a palette.
Added author photo upload with client-side resizing. Profile photos are stored in R2 and displayed on jots and the info page. Multiple sizes for different contexts.
Sites now generate an info page (/info.html) with author bio, social links, and site description. A proper 'about' page without extra configuration.
Comprehensive author system with site-wide defaults. Name, username, photo, bio, and verification badge. Author info appears on every jot with a clean profile bubble.
Builds now track duration and display it in the UI. Users can see how long their site takes to build and identify performance trends.
Implemented comprehensive build versioning. Each build captures the SHA of backend API, build system, dashboard, and templates. Full traceability for debugging.
Added Pagefind search functionality to generated sites. Full-text search across all jots with instant results. The search index is generated at build time.
Images are now resized on the client before upload. Max 1200px dimension (2x Retina for 600px container), quality optimization, and animated GIF passthrough. Saves bandwidth and storage.
Complete rewrite of the media upload system. Embedded media objects in jots with full metadata (CDN URL, filename, MIME type, size). Cloudflare R2 storage with presigned uploads.
Complete frontend site settings UI with a tabbed interface. Author info, SEO settings, social links, and navigation can all be configured from the dashboard.
Major feature port from micromusings: tag system with individual tag pages and tag cloud, pagination for home and tag pages, and comprehensive SEO files (robots.txt, sitemap.xml, humans.txt, ai.txt).
Added a build history page showing all site builds with status, duration, and timestamps. Users can track when their site was last built and troubleshoot issues.
Redesigned jot data format to match micromusings structure. Text, link, and photo types with proper content objects. Better organization for rendering.
Added comprehensive subdomain validation and reservation. System subdomains (api, admin, www, etc.) are protected. Length limits, character restrictions, and uniqueness checks in place.
Redesigned the dashboard to be site-focused. Users land on their sites list and drill down into individual site management. Clearer information architecture.
Added Cloudflare Worker for *.jottings.me subdomain routing to R2 storage. Each user's site is now accessible at their-subdomain.jottings.me with proper caching.
Sites now trigger an initial build automatically when created. Users see their site live immediately after creation, even with zero jots.
Implemented atomic counter updates using DynamoDB transactions. When a site is created, the user's totalSites counter is incremented atomically - no race conditions possible.
Complete dev/prod environment separation with GitHub Actions CI/CD. Push to develop deploys to dev, push to main deploys to production. Automated and reliable.
All API endpoints now follow a consistent response format: { success: true, data: { resource } } or { success: false, error: { code, message } }. Frontend consumption is now predictable.
After a brief pause, back to development. Prepared the dev environment for deployment with compatibility fixes and environment variable management.
When creating a link jot, the system now automatically fetches Open Graph metadata from the URL - title, description, and preview image. Uses cheerio for HTML parsing.