···2233In this guide, we're going to build a **simple multi-user app** that publishes your current "status" as an emoji.
4455+
66+57At various points we will cover how to:
6879- Signin via OAuth
···6567```
66686769When the user logs in, the OAuth client will create a new session with their repo server and give us read/write access along with basic user info.
7070+7171+
68726973Our login page just asks the user for their "handle," which is the domain name associated with their account. For [Bluesky](https://bsky.app) users, these tend to look like `alice.bsky.social`, but they can be any kind of domain (eg `alice.com`).
7074···231235 </div>`}
232236</div>
233237```
238238+239239+
234240235241You can examine this record directly using [atproto-browser.vercel.app](https://atproto-browser.vercel.app). For instance, [this is the profile record for @bsky.app](https://atproto-browser.vercel.app/at?u=at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.actor.profile/self).
236242···349355})
350356```
351357358358+And here we are!
359359+360360+
361361+352362## Step 5. Creating a custom "status" schema
353363354364The collections are typed, meaning that they have a defined schema. The `app.bsky.actor.profile` type definition [can be found here](https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/actor/profile.json).
···586596 `
587597})}
588598```
599599+600600+
589601590602## Step 8. Optimistic updates
591603