## Disk structure /cache/: cached remote objects /db/: generated info, eg pubkeys, followers, /public/: output of static generation. will contain all html files, activitypub json, and media /src/: source files that are used for static generation /taskq.sqlite3: sqlite database for naive persistent task queue stores the activitypub stuff to in a crash-resistant way ## User object endpoint: https://my.instance.tld/ required info - name - preferredUsername - icon - summary (markdown format) generated info - compiled summary: - mentions: class="u-url mention" - hashtagges: rel="tag" - type: person - pubkey (/db/actorkey.pub, privkey: /db/actorkey) - inbox/sharedInbox (POST endpoint) - outbox (generated based on src posts) - followers (/db/followers/) - following: null, liked: null, featured: null (for now) - contexts: activitystreams, security, as:Hashtag, as:sensitive, as:manuallyApprovesFollwers, as:movedTo, toot, toot:Emoji, toot:focalPoint, toot:featured ### RSS mvp will support rss. with full post contents ## Cache /cache/actors/ stores actor objects fetched from remote instances filename: .json, contents: the full activitypub json for the actor inotify will be used to detect completion of a queued request if a remote request fails after a reasonable retry interval, it may be aborted and the cache may be filled in with dummy data indicating the resource could not be fetched ## Task queue stores queued outgoing requests TODO ## Procedures - compile: takes everything in src and db (and cache) and regenerates the contents of public compile may make queued requests and block until they are complete compile should be smart and only regenerate resources as necessary, based on file timestamps if new posts are present, compile must generate output products for the new posts, queue all activitypub outgoing requests, and then save the completion flag if a new post is present, the output product is also present, but the completion flag is not present, re-queue all outgoing requests then save the completion flag if an output product for a post is present, the completion flag is present, but the original post is not present, queue undo requests and then remove the output and flag - accept follow: fetch remote user, make all reasonable security checks, and accept follow request. store result in /cache/actors/ and /db/followers/. then call a compile - accept comment: fetch remote user, make all reasonable security checks, and save comment. store result in /cache/actors/ and /db/comments/. then call a compile ## Followers/following lists directory-based (/db/followers/) each file is a follower, filename is .json, file contents is the follow object received. corresponding cache entry for the remote actor initially we can accept all follows. later a mechanism can be added for manual approval ## Comments /db/comments/ stores all comments received on posts filename: .json, contents: the contents of the comment json ## Likes will not be supported ## Article object /db/posted/: stores flags for completion for post generation and queuing of outgoing activitypub notifications. filename todo