Skip to content

React Creator Flow

This example matches the recommended customer flow: email first, OTP second, Instagram third.

import { useEffect, useState } from "react";
import Boomin from "boominjs";
Boomin.init({
publicKey: import.meta.env.VITE_BOOMIN_PUBLIC_KEY,
programId: import.meta.env.VITE_BOOMIN_PROGRAM_ID,
apiBase: import.meta.env.VITE_BOOMIN_API_BASE,
redirectUri: window.location.origin + window.location.pathname,
});
export default function CreatorSignup() {
const [email, setEmail] = useState("");
const [name, setName] = useState("");
const [code, setCode] = useState("");
const [status, setStatus] = useState("start");
const [message, setMessage] = useState("");
useEffect(() => {
const result = Boomin.consumeRedirectResult();
if (!result?.sessionId) return;
Boomin.getConnectStatus(result.sessionId).then((next) => {
setStatus(next.status);
setMessage(next.username ? `@${next.username} is ${next.status}` : next.status);
});
}, []);
async function requestOtp(event) {
event.preventDefault();
await Boomin.requestOtp({ email, name });
setStatus("otp");
}
async function verifyOtp(event) {
event.preventDefault();
await Boomin.verifyOtp({ email, name, code });
setStatus("verified");
}
async function connectInstagram() {
await Boomin.connectInstagram({
requireCreator: true,
referralCode: new URLSearchParams(window.location.search).get("ref"),
metadata: { source: "react_creator_flow" },
});
}
return (
<main>
{status === "start" && (
<form onSubmit={requestOtp}>
<input value={name} onChange={(event) => setName(event.target.value)} placeholder="Name" />
<input value={email} onChange={(event) => setEmail(event.target.value)} placeholder="Email" />
<button>Send code</button>
</form>
)}
{status === "otp" && (
<form onSubmit={verifyOtp}>
<input value={code} onChange={(event) => setCode(event.target.value)} placeholder="OTP code" />
<button>Verify email</button>
</form>
)}
{status === "verified" && (
<button onClick={connectInstagram}>Connect Instagram</button>
)}
{message && <p>{message}</p>}
</main>
);
}

For a working package example, see packages/boomin/examples/react-account-first in the Boomin repo.