MeBook
Overview
The MeBook is a personal interaction manual -- a structured way for users to share how they prefer to communicate, what topics they are open to, and how others can best connect with them. Rather than a traditional bio, the MeBook uses guided questions with various input types to help users articulate their social preferences in a thoughtful, low-pressure way.
The MeBook serves a dual purpose: it helps the user reflect on their own communication style, and it provides visitors to their HomeRoom with actionable context about how to interact with them. This aligns with CommonPlace's philosophy that social connection should be intentional and informed rather than guesswork.
The MeBook supports multiple pacing modes for filling it out (Ripple, Map, Surprise, Freeform), allowing users to approach the process in whatever way feels most natural. Questions use a variety of input types including single select, multi select, card select, spectrum sliders, drag-to-arrange, toggles, and free text.
Relevant Invariants
- Invariant #1: "Participation Is Always Voluntary" -- Users can skip the MeBook entirely or fill in only what they choose. No pressure to complete all questions.
- Invariant #19: "Complexity Must Be Earned" -- The MeBook flow introduces complexity gradually through pacing modes rather than presenting everything at once.
- Invariant #15: "Non-Interaction Is Valid" -- A user's MeBook can express preferences like "I prefer not to respond to most things" and this is treated as valid.
User Experience
User Flow
- Starting the MeBook: Navigate to
/mebook/create. First-time users see a welcome screen explaining the concept. - Choosing a pacing mode: The pacing screen offers four approaches:
- Ripple: Start with one question, expanding outward
- Map: See all sections, choose your path
- Surprise: Random questions, one at a time
- Freeform: Browse and answer anything
- Answering questions: Each question is rendered with the appropriate input type. Responses are saved as the user progresses.
- Completion: When done, a completion screen offers to finalize the MeBook.
- Viewing: The MeBook is viewable at
/mebook/view/:userIdand can be embedded as a module in the HomeRoom.
Input Types
| Input Type | Component | Description |
|---|---|---|
| Single Select | SingleSelect | Choose one option from a list |
| Multi Select | MultiSelect | Choose multiple options |
| Card Select | CardSelect | Visual cards for selection |
| Spectrum | Spectrum | Slider for numeric/range values |
| Drag Arrange | DragArrange | Reorder items by priority |
| Toggle | Toggle | Boolean yes/no toggle |
| Free Text | FreeText | Open-ended text input |
Technical Implementation
Key Files
| File | Purpose |
|---|---|
src/hooks/useMeBookQuestion.js | Hook for managing individual question state: value, options, selection, spectrum, toggle, and drag-arrange operations |
src/contexts/MeBookContext.jsx | React context providing responses, options, setResponse, pacingMode, finishMeBook, hasCompletedMeBook, and loading state |
src/components/mebook/MeBookFlow.jsx | Main flow controller with step management (welcome > pacing > questions > complete) |
src/components/mebook/MeBookViewer.jsx | Read-only viewer that fetches and displays a user's MeBook via get_user_mebook RPC |
src/components/mebook/MeBookCard.jsx | Card component for displaying MeBook data |
src/components/mebook/QuestionRenderer.jsx | Renders the appropriate input component for each question type |
src/components/mebook/QuestionCard.jsx | Wrapper card for individual questions |
src/components/mebook/SectionSummary.jsx | Summary display for a section's responses |
src/components/mebook/screens/WelcomeScreen.jsx | Introduction screen for new MeBook users |
src/components/mebook/screens/PacingScreen.jsx | Pacing mode selection screen |
src/components/mebook/screens/RippleFlow.jsx | Ripple pacing implementation |
src/components/mebook/screens/MapFlow.jsx | Map pacing implementation |
src/components/mebook/screens/SurpriseFlow.jsx | Surprise (random) pacing implementation |
src/components/mebook/screens/FreeformFlow.jsx | Freeform browsing implementation |
src/components/mebook/screens/CompletionScreen.jsx | Completion and finalization screen |
src/components/mebook/inputs/ | Input components: SingleSelect, MultiSelect, CardSelect, Spectrum, DragArrange, Toggle, FreeText |
src/components/mebook/MeBookViewPage.jsx | Full-page MeBook view |
src/components/modules/MeBookModule.jsx | HomeRoom module that embeds the MeBook viewer |
src/components/settings/MeBookPreferencesPanel.jsx | Settings panel for MeBook visibility preferences |
useMeBookQuestion(questionId) Hook
Provides a complete API for managing a single question's state:
Returns:
options-- Available options for this questionvalue-- Current response valuecustomText-- Free-text addition to a responsehasResponse-- Whether a response has been setsetValue(value)-- Set the response valuesetCustomText(text)-- Set custom texttoggleOption(optionValue)-- Toggle a multi-select optionisSelected(optionValue)-- Check if an option is selectedsetSpectrumValue(numericValue)-- Set a spectrum/slider valuetoggleValue()-- Toggle a boolean valuesetOrderedValues(orderedArray)-- Set drag-arrange order
MeBook Viewer
The MeBookViewer component fetches a user's MeBook via the get_user_mebook RPC function, which takes target_user_id and viewer_user_id parameters. This allows for visibility controls where some responses may only be visible to friends or specific audiences.
Database Tables
| Table | Purpose |
|---|---|
mebook_sections | Defines sections/categories of questions |
mebook_questions | Individual questions with type, text, and section association |
mebook_question_options | Predefined options for select-type questions |
mebook_responses | User responses to questions |
mebook_creation_progress | Tracks completion state and pacing mode per user |
mebook_section_skips | Tracks which sections a user has skipped |
mebook_visibility | Controls visibility settings for MeBook sections |
Edge Cases
| Scenario | Behavior |
|---|---|
| User has no MeBook | Viewer shows "You haven't created your MeBook yet" with CTA link (own profile) or "This person's MeBook is not available" (other profiles) |
| MeBook with no sections | Shows appropriate empty state |
| Returning user with existing responses | Skips welcome screen and goes directly to questions step |
| User exits mid-flow | Progress is saved in the context; they can resume later |
| Viewing someone else's MeBook | Uses RPC function that respects visibility settings |
Related
- HomeRoom -- MeBook can be displayed as a HomeRoom module
- Friends -- MeBook visibility may depend on friendship status
Last updated: 2026-02-07