Skip to main content

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

  1. Starting the MeBook: Navigate to /mebook/create. First-time users see a welcome screen explaining the concept.
  2. 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
  3. Answering questions: Each question is rendered with the appropriate input type. Responses are saved as the user progresses.
  4. Completion: When done, a completion screen offers to finalize the MeBook.
  5. Viewing: The MeBook is viewable at /mebook/view/:userId and can be embedded as a module in the HomeRoom.

Input Types

Input TypeComponentDescription
Single SelectSingleSelectChoose one option from a list
Multi SelectMultiSelectChoose multiple options
Card SelectCardSelectVisual cards for selection
SpectrumSpectrumSlider for numeric/range values
Drag ArrangeDragArrangeReorder items by priority
ToggleToggleBoolean yes/no toggle
Free TextFreeTextOpen-ended text input

Technical Implementation

Key Files

FilePurpose
src/hooks/useMeBookQuestion.jsHook for managing individual question state: value, options, selection, spectrum, toggle, and drag-arrange operations
src/contexts/MeBookContext.jsxReact context providing responses, options, setResponse, pacingMode, finishMeBook, hasCompletedMeBook, and loading state
src/components/mebook/MeBookFlow.jsxMain flow controller with step management (welcome > pacing > questions > complete)
src/components/mebook/MeBookViewer.jsxRead-only viewer that fetches and displays a user's MeBook via get_user_mebook RPC
src/components/mebook/MeBookCard.jsxCard component for displaying MeBook data
src/components/mebook/QuestionRenderer.jsxRenders the appropriate input component for each question type
src/components/mebook/QuestionCard.jsxWrapper card for individual questions
src/components/mebook/SectionSummary.jsxSummary display for a section's responses
src/components/mebook/screens/WelcomeScreen.jsxIntroduction screen for new MeBook users
src/components/mebook/screens/PacingScreen.jsxPacing mode selection screen
src/components/mebook/screens/RippleFlow.jsxRipple pacing implementation
src/components/mebook/screens/MapFlow.jsxMap pacing implementation
src/components/mebook/screens/SurpriseFlow.jsxSurprise (random) pacing implementation
src/components/mebook/screens/FreeformFlow.jsxFreeform browsing implementation
src/components/mebook/screens/CompletionScreen.jsxCompletion and finalization screen
src/components/mebook/inputs/Input components: SingleSelect, MultiSelect, CardSelect, Spectrum, DragArrange, Toggle, FreeText
src/components/mebook/MeBookViewPage.jsxFull-page MeBook view
src/components/modules/MeBookModule.jsxHomeRoom module that embeds the MeBook viewer
src/components/settings/MeBookPreferencesPanel.jsxSettings 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 question
  • value -- Current response value
  • customText -- Free-text addition to a response
  • hasResponse -- Whether a response has been set
  • setValue(value) -- Set the response value
  • setCustomText(text) -- Set custom text
  • toggleOption(optionValue) -- Toggle a multi-select option
  • isSelected(optionValue) -- Check if an option is selected
  • setSpectrumValue(numericValue) -- Set a spectrum/slider value
  • toggleValue() -- Toggle a boolean value
  • setOrderedValues(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

TablePurpose
mebook_sectionsDefines sections/categories of questions
mebook_questionsIndividual questions with type, text, and section association
mebook_question_optionsPredefined options for select-type questions
mebook_responsesUser responses to questions
mebook_creation_progressTracks completion state and pacing mode per user
mebook_section_skipsTracks which sections a user has skipped
mebook_visibilityControls visibility settings for MeBook sections

Edge Cases

ScenarioBehavior
User has no MeBookViewer 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 sectionsShows appropriate empty state
Returning user with existing responsesSkips welcome screen and goes directly to questions step
User exits mid-flowProgress is saved in the context; they can resume later
Viewing someone else's MeBookUses RPC function that respects visibility settings
  • HomeRoom -- MeBook can be displayed as a HomeRoom module
  • Friends -- MeBook visibility may depend on friendship status

Last updated: 2026-02-07