Didier Fuentes
Projectapps·

Quill

An iOS app that generates Instagram captions in your authentic writing voice.

The Idea

Captions that sound like you. Quill is an iOS app that helps Instagram creators generate captions that match their authentic writing voice. Instead of producing generic AI copy, Quill learns how you actually write — your tone, vocabulary, sentence patterns, emoji habits, and quirks — then generates caption options that genuinely sound like you wrote them.

What It Does

Connect Your Instagram

Quill starts by connecting to your Instagram account and importing your existing captions. You choose which posts to include — nothing is pulled in without your say-so. These captions become the raw material for understanding your voice.

Build a Voice Profile

Select at least ten of your captions and Quill analyzes them to build a voice profile: a breakdown of your tone (witty, casual, reflective), the words and phrases you gravitate toward, how you structure sentences, your emoji frequency and favorites, your hashtag style, and any writing quirks that make your captions distinctly yours.

Once a profile is generated, you validate it through a calibration step — Quill generates test captions and asks "Does this sound like you?" This feedback loop ensures the profile actually captures your voice before you start using it.

You can create multiple voice profiles for different contexts (personal vs. brand, casual vs. professional) and switch between them when generating captions.

Generate Captions

When you're ready to post, describe what the post is about, choose the post type (single, reel, carousel, or story), optionally set a mood and engagement intent, and hit generate. Quill returns several caption variations, each written in your voice.

From there you can copy a caption directly, edit it inline, or mark one as your pick. If none of them land, discard the batch and tweak your inputs. You can also revisit any past generation and reuse its settings as a starting point for a new round.

Track and Iterate

Every generation is saved to your history. You can browse past results, review which caption you selected, delete old entries, or pull up the full detail view with all variations and input parameters. Quill also logs your preferences — which captions you chose, edited, or passed on — and feeds that signal back into future generations so results improve over time.

Guided Setup

The home screen adapts to where you are in the setup process, surfacing the next step: connect Instagram, build a voice profile, or start creating. Once everything is in place, it shows your recent generations for quick access.

Tech Stack

LayerTechnology
LanguageSwift 5
UISwiftUI, targeting iOS 18+
ArchitectureMVVM with repository pattern
BackendFirebase (Auth, Firestore, Cloud Functions, Crashlytics)
AuthFirebase Auth (email/password, Apple Sign In, Google Sign In)
External APIInstagram Graph API (via server-side Cloud Functions)
DeploymentFastlane to TestFlight

Architecture

MVVM with a repository layer that mediates between views and Firebase. Services and repositories are @Observable classes with @MainActor isolation, injected into the SwiftUI view hierarchy via .environment().

Data flows through Firestore snapshot listeners — repositories open real-time listeners when views appear and close them on disappear, so the UI stays in sync without manual refresh. Writes use optimistic updates: local state changes immediately while Firestore writes happen in the background.

Navigation is managed by a single router that maintains independent navigation stacks for each of the four tabs (Home, Create, Profile, Settings), supporting deep linking between tabs (e.g., tapping "Reuse" on a past generation switches to the Create tab with prefilled inputs).

Cloud Functions

The heavy lifting happens server-side through Firebase Cloud Functions:

  • Style profile generation — analyzes a batch of selected captions and extracts tone, vocabulary, sentence patterns, emoji usage, quirks, hashtag style, and average length.
  • Calibration caption generation — produces test captions for profile validation.
  • Caption generation — takes user inputs, the active voice profile, and recent preference history to produce caption variations.

The cloud function layer is abstracted behind a protocol, with a mock implementation available for offline development and testing.

Links