diff --git a/indexedDb/model.go b/indexedDb/model.go
index c46bad409ca43a8fb8276c249c3dcb3876dd1457..6b26e908ae487dfb1443e8218327d9db99b09641 100644
--- a/indexedDb/model.go
+++ b/indexedDb/model.go
@@ -20,15 +20,21 @@ const (
 	// Text representation of the names of the various [idb.ObjectStore].
 	messageStoreName  = "messages"
 	channelsStoreName = "channels"
+	userStoreName     = "users"
 
 	// Message index names.
 	messageStoreChannelIndex   = "channel_id_index"
+	messageStoreUserIndex      = "user_id_index"
 	messageStoreParentIndex    = "parent_message_id_index"
 	messageStoreTimestampIndex = "timestamp_index"
 	messageStorePinnedIndex    = "pinned_index"
 
+	// UserIdentity index names.
+	userStorePubkeyIndex = "pubkey_index"
+
 	// Message keyPath names (must match json struct tags).
 	messageStoreChannel   = "channel_id"
+	messageStoreUser      = "user_id"
 	messageStoreParent    = "parent_message_id"
 	messageStoreTimestamp = "timestamp"
 	messageStorePinned    = "pinned"
@@ -39,10 +45,14 @@ const (
 // A Message belongs to one Channel.
 //
 // A Message may belong to one Message (Parent).
+//
+// A Message belongs to one User (cryptographic identity).
+// The user's nickname can change each message.
 type Message struct {
 	Id              []byte        `json:"id"` // Matches pkeyName
-	SenderUsername  string        `json:"sender_username"`
+	Nickname        string        `json:"nickname"`
 	ChannelId       []byte        `json:"channel_id"`        // Index
+	UserId          []byte        `json:"user_id"`           // Index
 	ParentMessageId []byte        `json:"parent_message_id"` // Index
 	Timestamp       time.Time     `json:"timestamp"`         // Index
 	Lease           time.Duration `json:"lease"`
@@ -60,3 +70,19 @@ type Channel struct {
 	Name        string `json:"name"`
 	Description string `json:"description"`
 }
+
+// User defines the IndexedDb representation of a single user's
+// cryptographic identity
+//
+// A User has many Message.
+type User struct {
+	Id             []byte `json:"id"`     // Matches pkeyName
+	Pubkey         []byte `json:"pubkey"` //Index
+	Honorific      string `json:"honorific"`
+	Adjective      string `json:"adjective"`
+	Noun           string `json:"noun"`
+	Codename       string `json:"codename"`
+	Color          string `json:"color"`
+	Extension      string `json:"extension"`
+	CodesetVersion uint8  `json:"codeset_version"`
+}