Hear your users. Ship what they ask for. Tell them it’s live.

Marvey puts surveys, a feedback board and screenshot bug reports inside your iOS app. Your team works all of it from one dashboard, ships the fix, and everyone who asked for it gets a push when it’s done.

In private beta for iOS teams. One Swift package, iOS 15 and up.

Instead of asurveytool, afeedbackboard, abug reporttracker and astore reviewsinbox: one Swift package and one dashboard.

Every answer, vote, report and review is tied to the same person, so you know who asked for what, and who to tell when it ships.

From a tap in your app to “It’s live!”

The whole loop with Logair, a logbook app for pilots: what the pilot sees on their phone, and what the team sees in Marvey.

  1. Ask at the right moment.

    Your app sends the moments it already knows about, like a logged flight. The survey’s rules live on the server — the 5th time, every 10th, at most once a fortnight, only on 2.3 and up — and the answer picks the follow-up.

    WandKit.event("logbook_entry_saved")

    Marvey: I only ask when it’s due. Nobody likes being nagged.

  2. Let them speak up any time.

    The board is one tap away, in your app’s colours and font, and similar posts show up while someone types. A screenshot asks if something’s wrong, and the report brings device details, logs and a session replay.

    Marvey: 127 pilots already asked for that. Vote instead?

  3. Work it all in one place.

    Survey answers, posts and bug reports land in one inbox, each tied to the person who sent it. Merge the duplicates, turn a bug into an issue, and get the morning digest in Slack, with buttons to triage from the thread.

    Marvey: Nothing goes public until you say yes.

  4. Ship it, and watch the stores.

    Connect App Store Connect and Google Play to follow each build through review and rollout. Your What’s new entry links the requests the release shipped.

    Marvey: Stuck in review? I’ll flag it. Rejected? I’ll file the issue.

  5. Tell everyone who asked.

    Mark the request done and everyone who voted for it or follows it gets a push: “It’s live!” They see it ship, in the app where they asked for it.

    Marvey: 128 pilots, one push. Best part of my job.

Everything in the kit.

One SDK in your app and one dashboard for your team. All of it works today, unless it says otherwise.

  • In your app

    Surveys, Feedback board, Bug reports +5

  • In your dashboard

    Moderation, Issues, Releases +4

  • Plugged into

    Slack, App Store Connect and Google Play, RevenueCat +1

  • Coming next

    Event analytics, Smart deep links, Localized surveys

Everything in the kit

One SDK in your app and one dashboard for your team. All of it works today, unless it says otherwise.

In your app

What your users see.

  • Surveys

    Live

    Forms that show on the events you choose: stars, thumbs, choices, free text, branching. The copy lives on the server.

  • Feedback board

    Live

    Posts, votes, comments and follows, in your app’s colours and font. Similar posts show up while someone is typing.

  • Bug reports

    Live

    Take a screenshot and Marvey asks if something’s wrong. Reports arrive with device details, logs and a session replay.

  • What’s new

    Live

    Release notes inside the app, with an unread dot and links to the requests each release shipped.

  • Coming-soon previews

    Live

    Put a teaser on a feature you haven’t built. People who want it vote and follow, and it flips to available when you ship.

  • Push notifications

    Live

    Voters hear when their request is planned, in progress or live. Send one-off pushes from the dashboard too. iOS only.

  • Referrals and rewards

    Beta

    Invite links with a hosted landing page. Inviters earn a RevenueCat entitlement once enough friends join.

  • Invite codes

    Beta

    Run an invite-only beta: codes, a request form for your website, approval emails.

In your dashboard

Where your team works.

  • Moderation

    Live

    Nothing goes public until someone approves it. Merge duplicates, pin an official reply, keep internal notes.

  • Issues

    Live

    A kanban board for the team. Turn a post into an issue in one click, and see how many requests each issue answers.

  • Releases

    Live

    App Store Connect and Google Play builds through review and rollout. Stuck reviews get flagged, and a rejection files an issue.

  • Store reviews

    Live

    Reviews from both stores in one inbox, answered from the dashboard.

  • Survey results

    Live

    Impressions, completion and a breakdown for every question, each answer tied to the person who gave it.

  • Users

    Live

    One profile per person: their events, sessions, devices, subscription and everything they’ve sent you.

  • Staging and production

    Live

    Separate users, data and counters for each environment, in one project.

Plugged into

  • Slack

    A weekday morning digest with an optional summary written by Claude. Approve, reject and triage from the thread.

  • App Store Connect and Google Play

    Release status, rollouts and reviews, synced.

  • RevenueCat

    Rewards granted as entitlements, and each user’s subscription on their profile.

  • Apple Push Notification service

    Your own key, your own pushes.

Coming next

Not shipped yet. Don’t plan around them.

  • Event analytics

    Soon

    Charts and funnels on the events you already send.

  • Smart deep links

    Soon

    Referral links that open your app, not a web page.

  • Localized surveys

    Soon

    One form, many languages, served from the server.

A few lines of Swift. The rest is decided on the server.

Marvey is one Swift package with no runtime dependencies. You identify the user and send the events your app already knows about. When to ask, what to ask and how the board looks are decided on the server, so they change without an App Store release.

  • iOS 15 and up
  • Swift Package Manager
  • No runtime dependencies
  • No app delegate swizzling
Read the docs

Under the hood

App.swift
import WandKit

// once, at launch
WandKit.configure(apiKey: "wk_…")

// after sign-in
WandKit.identify("user_123", displayName: "Ana K.")

// moments your app already knows about.
// Marvey decides whether a survey is due.
WandKit.event("logbook_entry_saved")

// the board, What's new and the roadmap, from anywhere
WandKit.presentFeedback()

// optional: pushes for the people who voted
WandKit.registerDeviceToken(deviceToken)
  1. configureYour app’s key. It only reaches the SDK endpoints.
  2. identifyTies every answer, post and vote to a person.
  3. eventTriggers: the 5th time, every 10th time, once a fortnight, only on 2.3 and up.
  4. presentFeedbackOpens the board in your app’s colours, font and dark mode.
  5. registerDeviceTokenSo “It’s live!” reaches everyone who voted.

Forms as code

Keep surveys in your repo as JSON, review them in pull requests, push to staging, then publish to production.

wandkit forms pull
wandkit forms diff forms/post-flight.json
wandkit forms push forms/post-flight.json --env staging
wandkit forms publish post-flight --env production

The CLI prints JSON when piped and exits with documented codes, so a script — or an agent — can read your feedback:

wandkit responses export --form post-flight --since 30d | claude -p 'cluster the themes'

Three keys, three jobs

wk_
Ships inside your app. Reaches SDK endpoints only.
wks_
Your backend only: pushes, referral conversions, invite codes.
wkp_
Personal tokens for the CLI and scripts. Read-only by default, and they always expire.

Old builds keep working

Each SDK build tells the server which kinds of question it can show. Anything newer is left out and the branches reconnect, so a form you publish today never breaks last year’s version.

Questions teams ask before a demo.

Anything else, write to info@wandkit.app.

What is Marvey?

An SDK for your iOS app and a dashboard for your team. In the app, it shows surveys at the moments you choose, a feedback board people can vote on, and a way to report a bug with a screenshot. In the dashboard, your team approves, triages and answers all of it, follows each release through the App Store and Google Play, and tells everyone who asked when it ships.

How long does the integration take?

Add the Swift package, call WandKit.configure once at launch and WandKit.identify after sign-in. After that, each moment you want to ask about is one WandKit.event line, and the board is one WandKit.presentFeedback call. iOS 15 and up, no runtime dependencies.

Do I need an App Store release to change a survey?

No. Questions, options, buttons, triggers and branching live on the server, so a change reaches the next person who hits the trigger. Builds too old for a new kind of question simply skip it.

Can people post anything on the board?

Every post from inside your app waits for someone on your team to approve it, and that can’t be switched off. While someone types, Marvey shows similar posts so they can vote instead of filing a duplicate.

Does it work on Android?

The SDK is iOS today. On the dashboard side, releases and store reviews already cover Google Play as well as the App Store.

Is it ready for production?

Marvey is in private beta, and we onboard teams one at a time. The security page lists what’s in place today and what isn’t: there’s no SOC 2 report yet, and dashboard sign-in is Google only.

What does it cost?

There’s no public pricing during the private beta. Book a demo, tell us about your app, and we’ll take it from there.

Put a real feedback loop in your iOS app.

We’re onboarding teams one at a time during the private beta.Tell us about your app and we’ll walk you through it.