Skip to content

Add keyboard theme customization with multi-category theme picker #643

@prince-0408

Description

@prince-0408

Terms

Description

Summary

Scribe currently has no way for users to personalize the keyboard's appearance.
All keyboards use a single default color scheme that follows system light/dark mode.
This issue proposes adding a full keyboard theme system with a visual theme picker in the Settings tab.

Motivation

  • Users expect keyboard personalization as a standard feature (Gboard, SwiftKey, Fleksy all offer it)
  • Scribe's language-learning focus makes it a daily-use keyboard — users want it to feel personal
  • No other keyboard app offers culturally-inspired themes tied to the languages being learned

Proposed Solution

Theme System

  • Add a KeyboardTheme struct defining all keyboard color slots
  • Add a ThemeManager that persists the selected theme via the shared UserDefaults app group and applies it to the global color variables used across all keyboard extensions
  • Themes apply instantly across all installed language keyboards without restart

Theme Categories (37 themes total)

Category Examples
Classic Default, Ocean, Teal, Sepia
Dark Midnight, Violet, Slate, Crimson
Light Snow, Rose, Lavender, Mint, Peach, Sand
Gradient Aurora, Sunset, Galaxy, Ember, Cotton Candy, Citrus, Arctic
Neon Neon Cyber, Neon Pulse, Neon Lime
Nature Forest, Terracotta, Sakura, Deep Sea, Autumn
Cultural Berlin, Paris, Madrid, Stockholm
Accessible HC Dark, HC Light, Warm AA

Theme Picker UI

  • Gboard-style sectioned 3-column grid in Settings → Keyboard theme
  • Each card shows a realistic mini keyboard preview with key rows and spacebar strip
  • Gradient themes render actual CAGradientLayer diagonal gradients in the preview
  • Selected theme shows a CTA-colored border and checkmark badge
  • System-adaptive colors (works in both light and dark mode)
  • Current theme name shown as subtitle on the Settings row

Files Changed

  • Keyboards/KeyboardsBase/KeyboardTheme.swift (new)
  • Scribe/Themes/ThemePickerViewController.swift (new)
  • Keyboards/KeyboardsBase/KeyboardViewController.swift
  • Scribe/SettingsTab/SettingsTableData.swift
  • Scribe/SettingsTab/SettingsViewController.swift
  • Scribe/Views/Cells/InfoChildTableViewCell/InfoChildTableViewCell.swift
  • Scribe/ParentTableCellModel.swift

Metadata

Metadata

Assignees

No one assigned

    Labels

    designRelates to UX/UI designs

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions