Notes:

  • Assumes CouchDB compatible database
  • Arrays are indicated by []
  • All Doctypes start with pb to avoid naming collisions but should otherwise make sense.
  • {i18n} - indicates an object with the text in an object with i18n keys.


All docs should have these fields

name Type notes
id String probably from Couch
dateCreated Date  
dateModified Date  
createdBy User  
modifiedBy User  


Site

name Type notes
title String The title of the site “Phonoblogical” used if empty
url URL The url of the site
tagline {i18} The tagline used in the site description (mostly google).


_user extensions

name Type notes
audienceLevel String ‘all’, ‘member’, ‘patron’, ‘none’
email String.email email address of user


All ‘targetable’

Targetable are those that can have a url, not used internally by the app

name Type notes
shortID String Something short for URL - see snowflake
status String “draft”, “published”, “removed”, “review”, “submitted”
signature String Future: Allow for signing content. See https://wiki.apache.org/couchdb/SignedDocuments

May want to consider header items. See: https://gist.github.com/kevinSuttle/1997924




User profile:

These are separate from the actual user table that will not be syncable.

name Type notes
doctype “pbprofile”  
userID String From the ? need to figure out
handle String  
real_name String optional: real name


Group:

name Type notes
doctype “pbgroup”  
name String  
users [User]  


Album:

name Type notes
doctype “pbalbum”  
title String  
dateReleased Date  
information {i18n}  
artist Artist  
tracks [Track]  
urls [URL]  
tags [String]  
reviews [Review]  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Track:

name Type notes
doctype “pbtrack”  
title String  
artist Artist  
album Album  
dateReleased Date  
information {i18n}  
tags [String]  
genre [String]  
lyrics [String]  
lyricsURL URL  
BPM Int  
urls [URL]  
videos [URL]  
reviews [Review]  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Artist:

name Type notes
doctype “pbartist”  
name: String  
information: {i18n}  
tracks: [Track]  
albums: [Album]  
urls: [URL]  
reviews: [Review]  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Video:

name Type notes
doctype “pbvideo”  
url: [URL]  
reviews: [Review]  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Blog Post:

name Type notes
doctype “pbblog”  
title String  
text String  
stub String  
tags [String]  
language String  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Review:

name Type notes
doctype “pbreview”  
reviewText: {i18n}  
ratings: [Rating]  
weApprove: bool  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Rating:

name Type notes
doctype “pbrating”  
ratingType: RatingType  
ratingText: {i18n}  
rating: Number  
audience String ‘all’, ‘member’, ‘patron’, ‘none’


Rating type:

Note: Not a targettable type

name Type notes
doctype “pbratingtype”  
type {i18n}  


Page

name Type notes
doctype “pbpage”  
text {i18n}  
audience String ‘all’, ‘member’, ‘patron’, ‘none’