diff --git a/src/components/EndOfList.svelte b/src/components/EndOfList.svelte
new file mode 100644
index 0000000..065317a
--- /dev/null
+++ b/src/components/EndOfList.svelte
@@ -0,0 +1,5 @@
+
+
+ all posts seen! :o
+
+
diff --git a/src/components/FeedTimelineView.svelte b/src/components/FeedTimelineView.svelte
new file mode 100644
index 0000000..1c19cf5
--- /dev/null
+++ b/src/components/FeedTimelineView.svelte
@@ -0,0 +1,182 @@
+
+
+{#snippet feedPostsView()}
+ {#each feedPosts as post, i (post.uri)}
+ {@const uriParts = post.uri.split('/')}
+ {@const postDid = uriParts[2] as Did}
+ {@const postRkey = uriParts[4] as RecordKey}
+
+ {
+ postComposerState.focus = 'focused';
+ postComposerState.quoting = p;
+ }}
+ onReply={(p) => {
+ postComposerState.focus = 'focused';
+ postComposerState.replying = p;
+ }}
+ />
+
+ {#if i < feedPosts.length - 1}
+
+ {/if}
+ {/each}
+{/snippet}
+
+
diff --git a/src/components/LoadError.svelte b/src/components/LoadError.svelte
new file mode 100644
index 0000000..8e84527
--- /dev/null
+++ b/src/components/LoadError.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+ x_x
+ {error}
+
+
+
+
+
diff --git a/src/components/LoadingSpinner.svelte b/src/components/LoadingSpinner.svelte
new file mode 100644
index 0000000..c354933
--- /dev/null
+++ b/src/components/LoadingSpinner.svelte
@@ -0,0 +1,6 @@
+
diff --git a/src/components/ReplyTimelineView.svelte b/src/components/ReplyTimelineView.svelte
new file mode 100644
index 0000000..b597379
--- /dev/null
+++ b/src/components/ReplyTimelineView.svelte
@@ -0,0 +1,218 @@
+
+
+{#snippet replyPost(post: ThreadPost, reverse: boolean = reverseChronological)}
+
+ {reverse ? '↱' : '↳'}
+
+
+{/snippet}
+
+{#snippet threadsView()}
+ {#each threads as thread, i (thread.rootUri)}
+
+ {#if thread.branchParentPost}
+ {@render replyPost(thread.branchParentPost)}
+ {/if}
+ {#each thread.posts as post, idx (post.data.uri)}
+ {@const mini =
+ !expandedThreads.has(thread.rootUri) &&
+ thread.posts.length > 4 &&
+ idx > 0 &&
+ idx < thread.posts.length - 2}
+ {#if !mini}
+
+ {
+ postComposerState.focus = 'focused';
+ postComposerState.quoting = post;
+ }}
+ onReply={(post) => {
+ postComposerState.focus = 'focused';
+ postComposerState.replying = post;
+ }}
+ {...post}
+ />
+
+ {:else if mini}
+ {#if idx === 1}
+ {@render replyPost(post, !reverseChronological)}
+
+ {:else if idx === thread.posts.length - 3}
+ {@render replyPost(post)}
+ {/if}
+ {/if}
+ {/each}
+
+ {#if i < threads.length - 1}
+
+ {/if}
+ {/each}
+{/snippet}
+
+
+ {#if did || $accounts.length > 0}
+
+ {@render threadsView()}
+ {#snippet noData()}
+
+ {/snippet}
+ {#snippet loading()}
+
+ {/snippet}
+ {#snippet error()}
+
+ {/snippet}
+
+ {:else}
+
+ {/if}
+
diff --git a/src/components/TimelineView.svelte b/src/components/TimelineView.svelte
index 7e097e8..15ccaa4 100644
--- a/src/components/TimelineView.svelte
+++ b/src/components/TimelineView.svelte
@@ -1,30 +1,9 @@
-{#snippet replyPost(post: ThreadPost, reverse: boolean = reverseChronological)}
-
- {reverse ? '↱' : '↳'}
-
-
-{/snippet}
-
-{#snippet threadsView()}
- {#each threads as thread, i (thread.rootUri)}
-
- {#if thread.branchParentPost}
- {@render replyPost(thread.branchParentPost)}
- {/if}
- {#each thread.posts as post, idx (post.data.uri)}
- {@const mini =
- !expandedThreads.has(thread.rootUri) &&
- thread.posts.length > 4 &&
- idx > 0 &&
- idx < thread.posts.length - 2}
- {#if !mini}
-
- {
- postComposerState.focus = 'focused';
- postComposerState.quoting = post;
- }}
- onReply={(post) => {
- postComposerState.focus = 'focused';
- postComposerState.replying = post;
- }}
- {...post}
- />
-
- {:else if mini}
- {#if idx === 1}
- {@render replyPost(post, !reverseChronological)}
-
- {:else if idx === thread.posts.length - 3}
- {@render replyPost(post)}
- {/if}
- {/if}
- {/each}
-
- {#if i < threads.length - 1}
-
- {/if}
- {/each}
-{/snippet}
-
-{#snippet feedPostsView()}
- {#each feedPosts as post, i (post.uri)}
- {@const uriParts = post.uri.split('/')}
- {@const postDid = uriParts[2] as Did}
- {@const postRkey = uriParts[4] as RecordKey}
-
- {
- postComposerState.focus = 'focused';
- postComposerState.quoting = p;
- }}
- onReply={(p) => {
- postComposerState.focus = 'focused';
- postComposerState.replying = p;
- }}
- />
-
- {#if i < feedPosts.length - 1}
-
- {/if}
- {/each}
-{/snippet}
-
-
+{#if selectedFeed}
+
+{:else}
+
+{/if}