This challenge is designed to evaluate your ability to:
- Design and build modular Swift packages
- Work with remote configuration and dynamic content
- Structure code with maintainability and scalability in mind
- Think critically about architecture, state, and integration
- Apply SwiftUI and modern reactive paradigms effectively
At Kovalee, we build and scale mobile apps across different categories. We often need to display contextual in-app banners to announce new features, run promotions, or prompt user actions.
These banners must be:
- Remotely configurable, so they can be changed without new releases
- Reusable across multiple apps
- Styled and presented consistently, while remaining flexible
- Able to control when and how often they appear
You are tasked with designing the first version of this Banner SDK.
You’ll design the first iteration of a Remote Configurable Banner SDK. This component will eventually be reused across multiple Kovalee apps to display messages to users such as feature announcements, offers, or other contextual content.
The challenge is broken down into four levels. Each level builds on top of the previous one and adds increasing complexity. You are not expected to complete all levels, this is meant to assess how you think, not just what you ship.
Simulate a remote configuration (e.g., a JSON file or mock API) that provides the content and styling for the banner.
You’ll need to define:
- A model that can represent this banner configuration (title, subtitle, CTA, colors, etc.)
- A way to fetch and decode this config asynchronously
Create a reusable SwiftUI view that renders the banner using the data provided in the config. The banner should be easily embeddable in any app, and capable of adapting to different styles or layouts depending on the config.
Expected features:
- Title, subtitle, and CTA button
- A dismiss/close action
- Styling via the config (e.g. colors, text styles)
Add internal logic to control when and how often the banner appears. Write the logic to, only show it once per app launch, and once every X hours. Based on the configuration, the app will use one or the other.
Use a SwiftUI-first approach to implement a simple event-tracking mechanism that allows the SDK to inform the host app about user interactions (e.g., banner shown, button tapped, dismissed).
- SwiftUI-first architecture and clean state management
- Clear separation between data, logic, and presentation
- Thoughtful use of modern patterns (e.g. Observable, async/await, @Environment, etc.)
- A modular design that feels like a real-world SDK
- Simplicity and developer experience over unnecessary complexity
- Organize your code as a Swift Package
- Make it easy to use and integrate in a SwiftUI app
- You’re free to use any architectural approach you prefer (e.g. MVVM, unidirectional data flow, TCA, etc.)
- The goal is not to finish the entire challenge, but to show us how you think and how you approach complex, open-ended problems.
- Ask lots of questions if something feels ambiguous either during the live session or in written form. We’re more interested in your reasoning than in your assumptions.
- Keep your code clean and pragmatic, avoid overengineering or solving for hypothetical edge cases.
- Prioritize modularity and developer experience, think about how another iOS dev would integrate your SDK.
- You can use Google and ChatGPT to ask any question, or Copilot for code completion.