diff --git a/pkg/interface/src/index.js b/pkg/interface/src/index.js
index 083a99d78..a056a0cb2 100644
--- a/pkg/interface/src/index.js
+++ b/pkg/interface/src/index.js
@@ -1,7 +1,6 @@
import * as React from 'react';
import * as ReactDOM from 'react-dom';
-// import "./fonts/font.css";
-import App from './App';
+import App from './views/App';
ReactDOM.render(, document.getElementById('root'));
diff --git a/pkg/interface/src/api/base.ts b/pkg/interface/src/logic/api/base.ts
similarity index 100%
rename from pkg/interface/src/api/base.ts
rename to pkg/interface/src/logic/api/base.ts
diff --git a/pkg/interface/src/api/chat.ts b/pkg/interface/src/logic/api/chat.ts
similarity index 100%
rename from pkg/interface/src/api/chat.ts
rename to pkg/interface/src/logic/api/chat.ts
diff --git a/pkg/interface/src/api/contacts.ts b/pkg/interface/src/logic/api/contacts.ts
similarity index 100%
rename from pkg/interface/src/api/contacts.ts
rename to pkg/interface/src/logic/api/contacts.ts
diff --git a/pkg/interface/src/api/global.ts b/pkg/interface/src/logic/api/global.ts
similarity index 100%
rename from pkg/interface/src/api/global.ts
rename to pkg/interface/src/logic/api/global.ts
diff --git a/pkg/interface/src/api/groups.ts b/pkg/interface/src/logic/api/groups.ts
similarity index 100%
rename from pkg/interface/src/api/groups.ts
rename to pkg/interface/src/logic/api/groups.ts
diff --git a/pkg/interface/src/api/invite.ts b/pkg/interface/src/logic/api/invite.ts
similarity index 100%
rename from pkg/interface/src/api/invite.ts
rename to pkg/interface/src/logic/api/invite.ts
diff --git a/pkg/interface/src/api/launch.ts b/pkg/interface/src/logic/api/launch.ts
similarity index 100%
rename from pkg/interface/src/api/launch.ts
rename to pkg/interface/src/logic/api/launch.ts
diff --git a/pkg/interface/src/api/links.ts b/pkg/interface/src/logic/api/links.ts
similarity index 100%
rename from pkg/interface/src/api/links.ts
rename to pkg/interface/src/logic/api/links.ts
diff --git a/pkg/interface/src/api/local.ts b/pkg/interface/src/logic/api/local.ts
similarity index 100%
rename from pkg/interface/src/api/local.ts
rename to pkg/interface/src/logic/api/local.ts
diff --git a/pkg/interface/src/api/metadata.ts b/pkg/interface/src/logic/api/metadata.ts
similarity index 100%
rename from pkg/interface/src/api/metadata.ts
rename to pkg/interface/src/logic/api/metadata.ts
diff --git a/pkg/interface/src/api/publish.ts b/pkg/interface/src/logic/api/publish.ts
similarity index 100%
rename from pkg/interface/src/api/publish.ts
rename to pkg/interface/src/logic/api/publish.ts
diff --git a/pkg/interface/src/lib/default-apps.js b/pkg/interface/src/logic/lib/default-apps.js
similarity index 100%
rename from pkg/interface/src/lib/default-apps.js
rename to pkg/interface/src/logic/lib/default-apps.js
diff --git a/pkg/interface/src/lib/group.ts b/pkg/interface/src/logic/lib/group.ts
similarity index 75%
rename from pkg/interface/src/lib/group.ts
rename to pkg/interface/src/logic/lib/group.ts
index 7541e835b..2078ed368 100644
--- a/pkg/interface/src/lib/group.ts
+++ b/pkg/interface/src/logic/lib/group.ts
@@ -1,5 +1,5 @@
-import { roleTags, RoleTags, Group, Resource } from '../types/group-update';
-import { PatpNoSig, Path } from '../types/noun';
+import { roleTags, RoleTags, Group, Resource } from '../../types/group-update';
+import { PatpNoSig, Path } from '../../types/noun';
export function roleForShip(group: Group, ship: PatpNoSig): RoleTags | undefined {
diff --git a/pkg/interface/src/lib/omnibox.js b/pkg/interface/src/logic/lib/omnibox.js
similarity index 100%
rename from pkg/interface/src/lib/omnibox.js
rename to pkg/interface/src/logic/lib/omnibox.js
diff --git a/pkg/interface/src/lib/s3.js b/pkg/interface/src/logic/lib/s3.js
similarity index 100%
rename from pkg/interface/src/lib/s3.js
rename to pkg/interface/src/logic/lib/s3.js
diff --git a/pkg/interface/src/lib/sigil.js b/pkg/interface/src/logic/lib/sigil.js
similarity index 100%
rename from pkg/interface/src/lib/sigil.js
rename to pkg/interface/src/logic/lib/sigil.js
diff --git a/pkg/interface/src/lib/util.js b/pkg/interface/src/logic/lib/util.js
similarity index 100%
rename from pkg/interface/src/lib/util.js
rename to pkg/interface/src/logic/lib/util.js
diff --git a/pkg/interface/src/reducers/chat-update.ts b/pkg/interface/src/logic/reducers/chat-update.ts
similarity index 91%
rename from pkg/interface/src/reducers/chat-update.ts
rename to pkg/interface/src/logic/reducers/chat-update.ts
index a66a287e1..5efe9cc23 100644
--- a/pkg/interface/src/reducers/chat-update.ts
+++ b/pkg/interface/src/logic/reducers/chat-update.ts
@@ -1,8 +1,8 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { ChatUpdate } from '../types/chat-update';
-import { ChatHookUpdate } from '../types/chat-hook-update';
+import { StoreState } from '../../../store/type';
+import { Cage } from '../../types/cage';
+import { ChatUpdate } from '../../types/chat-update';
+import { ChatHookUpdate } from '../../types/chat-hook-update';
type ChatState = Pick;
diff --git a/pkg/interface/src/reducers/connection.ts b/pkg/interface/src/logic/reducers/connection.ts
similarity index 79%
rename from pkg/interface/src/reducers/connection.ts
rename to pkg/interface/src/logic/reducers/connection.ts
index f0f811e46..cc0aba6f0 100644
--- a/pkg/interface/src/reducers/connection.ts
+++ b/pkg/interface/src/logic/reducers/connection.ts
@@ -1,6 +1,6 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
type LocalState = Pick;
diff --git a/pkg/interface/src/reducers/contact-update.ts b/pkg/interface/src/logic/reducers/contact-update.ts
similarity index 92%
rename from pkg/interface/src/reducers/contact-update.ts
rename to pkg/interface/src/logic/reducers/contact-update.ts
index 2cc7d04dc..c559d7b7e 100644
--- a/pkg/interface/src/reducers/contact-update.ts
+++ b/pkg/interface/src/logic/reducers/contact-update.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { ContactUpdate } from '../types/contact-update';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
+import { ContactUpdate } from '../../types/contact-update';
type ContactState = Pick;
diff --git a/pkg/interface/src/reducers/group-update.ts b/pkg/interface/src/logic/reducers/group-update.ts
similarity index 97%
rename from pkg/interface/src/reducers/group-update.ts
rename to pkg/interface/src/logic/reducers/group-update.ts
index 53cb0b6ba..1f584cbf1 100644
--- a/pkg/interface/src/reducers/group-update.ts
+++ b/pkg/interface/src/logic/reducers/group-update.ts
@@ -1,6 +1,6 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
import {
GroupUpdate,
Group,
@@ -11,8 +11,8 @@ import {
OpenPolicy,
InvitePolicyDiff,
InvitePolicy,
-} from '../types/group-update';
-import { Enc, PatpNoSig } from '../types/noun';
+} from '../../types/group-update';
+import { Enc, PatpNoSig } from '../../types/noun';
import { resourceAsPath } from '../lib/util';
type GroupState = Pick;
diff --git a/pkg/interface/src/reducers/invite-update.ts b/pkg/interface/src/logic/reducers/invite-update.ts
similarity index 90%
rename from pkg/interface/src/reducers/invite-update.ts
rename to pkg/interface/src/logic/reducers/invite-update.ts
index cea77f163..512e21b7f 100644
--- a/pkg/interface/src/reducers/invite-update.ts
+++ b/pkg/interface/src/logic/reducers/invite-update.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { InviteUpdate } from '../types/invite-update';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
+import { InviteUpdate } from '../../types/invite-update';
type InviteState = Pick;
diff --git a/pkg/interface/src/reducers/launch-update.ts b/pkg/interface/src/logic/reducers/launch-update.ts
similarity index 90%
rename from pkg/interface/src/reducers/launch-update.ts
rename to pkg/interface/src/logic/reducers/launch-update.ts
index 7790be761..96e968020 100644
--- a/pkg/interface/src/reducers/launch-update.ts
+++ b/pkg/interface/src/logic/reducers/launch-update.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { LaunchUpdate } from '../types/launch-update';
-import { Cage } from '../types/cage';
-import { StoreState } from '../store/type';
+import { LaunchUpdate } from '../../types/launch-update';
+import { Cage } from '../../types/cage';
+import { StoreState } from '../../store/type';
type LaunchState = Pick;
diff --git a/pkg/interface/src/reducers/link-update.ts b/pkg/interface/src/logic/reducers/link-update.ts
similarity index 98%
rename from pkg/interface/src/reducers/link-update.ts
rename to pkg/interface/src/logic/reducers/link-update.ts
index d960ec0bb..394c471a0 100644
--- a/pkg/interface/src/reducers/link-update.ts
+++ b/pkg/interface/src/logic/reducers/link-update.ts
@@ -1,6 +1,6 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { LinkUpdate, Pagination } from '../types/link-update';
+import { StoreState } from '../../store/type';
+import { LinkUpdate, Pagination } from '../../types/link-update';
// page size as expected from link-view.
// must change in parallel with the +page-size in /app/link-view to
diff --git a/pkg/interface/src/reducers/listen-update.ts b/pkg/interface/src/logic/reducers/listen-update.ts
similarity index 84%
rename from pkg/interface/src/reducers/listen-update.ts
rename to pkg/interface/src/logic/reducers/listen-update.ts
index 018204870..f823543cc 100644
--- a/pkg/interface/src/reducers/listen-update.ts
+++ b/pkg/interface/src/logic/reducers/listen-update.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { LinkListenUpdate } from '../types/link-listen-update';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
+import { LinkListenUpdate } from '../../types/link-listen-update';
type LinkListenState = Pick;
diff --git a/pkg/interface/src/reducers/local.ts b/pkg/interface/src/logic/reducers/local.ts
similarity index 87%
rename from pkg/interface/src/reducers/local.ts
rename to pkg/interface/src/logic/reducers/local.ts
index f5a526653..6d1dcf793 100644
--- a/pkg/interface/src/reducers/local.ts
+++ b/pkg/interface/src/logic/reducers/local.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { LocalUpdate } from '../types/local-update';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
+import { LocalUpdate } from '../../types/local-update';
type LocalState = Pick;
diff --git a/pkg/interface/src/reducers/metadata-update.ts b/pkg/interface/src/logic/reducers/metadata-update.ts
similarity index 93%
rename from pkg/interface/src/reducers/metadata-update.ts
rename to pkg/interface/src/logic/reducers/metadata-update.ts
index 24d26b7bd..94b7e7953 100644
--- a/pkg/interface/src/reducers/metadata-update.ts
+++ b/pkg/interface/src/logic/reducers/metadata-update.ts
@@ -1,9 +1,9 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
+import { StoreState } from '../../store/type';
-import { MetadataUpdate } from '../types/metadata-update';
-import { Cage } from '../types/cage';
+import { MetadataUpdate } from '../../types/metadata-update';
+import { Cage } from '../../types/cage';
type MetadataState = Pick;
diff --git a/pkg/interface/src/reducers/permission-update.ts b/pkg/interface/src/logic/reducers/permission-update.ts
similarity index 90%
rename from pkg/interface/src/reducers/permission-update.ts
rename to pkg/interface/src/logic/reducers/permission-update.ts
index 6fc70188c..7d3ed4865 100644
--- a/pkg/interface/src/reducers/permission-update.ts
+++ b/pkg/interface/src/logic/reducers/permission-update.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { PermissionUpdate } from '../types/permission-update';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
+import { PermissionUpdate } from '../../types/permission-update';
type PermissionState = Pick;
diff --git a/pkg/interface/src/reducers/publish-response.ts b/pkg/interface/src/logic/reducers/publish-response.ts
similarity index 98%
rename from pkg/interface/src/reducers/publish-response.ts
rename to pkg/interface/src/logic/reducers/publish-response.ts
index f79e218b2..57ed8446c 100644
--- a/pkg/interface/src/reducers/publish-response.ts
+++ b/pkg/interface/src/logic/reducers/publish-response.ts
@@ -1,6 +1,6 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
type PublishState = Pick;
diff --git a/pkg/interface/src/reducers/publish-update.ts b/pkg/interface/src/logic/reducers/publish-update.ts
similarity index 97%
rename from pkg/interface/src/reducers/publish-update.ts
rename to pkg/interface/src/logic/reducers/publish-update.ts
index 91a2c0d0b..25ea071b9 100644
--- a/pkg/interface/src/reducers/publish-update.ts
+++ b/pkg/interface/src/logic/reducers/publish-update.ts
@@ -1,9 +1,9 @@
import _ from 'lodash';
-import { PublishUpdate } from '../types/publish-update';
-import { Cage } from '../types/cage';
-import { StoreState } from '../store/type';
-import { getTagFromFrond } from '../types/noun';
+import { PublishUpdate } from '../../types/publish-update';
+import { Cage } from '../../types/cage';
+import { StoreState } from '../../store/type';
+import { getTagFromFrond } from '../../types/noun';
type PublishState = Pick;
diff --git a/pkg/interface/src/reducers/s3-update.ts b/pkg/interface/src/logic/reducers/s3-update.ts
similarity index 93%
rename from pkg/interface/src/reducers/s3-update.ts
rename to pkg/interface/src/logic/reducers/s3-update.ts
index 1915feec1..4d454ba40 100644
--- a/pkg/interface/src/reducers/s3-update.ts
+++ b/pkg/interface/src/logic/reducers/s3-update.ts
@@ -1,7 +1,7 @@
import _ from 'lodash';
-import { StoreState } from '../store/type';
-import { Cage } from '../types/cage';
-import { S3Update } from '../types/s3-update';
+import { StoreState } from '../../store/type';
+import { Cage } from '../../types/cage';
+import { S3Update } from '../../types/s3-update';
type S3State = Pick;
diff --git a/pkg/interface/src/store/base.ts b/pkg/interface/src/logic/store/base.ts
similarity index 100%
rename from pkg/interface/src/store/base.ts
rename to pkg/interface/src/logic/store/base.ts
diff --git a/pkg/interface/src/store/global.js b/pkg/interface/src/logic/store/global.js
similarity index 100%
rename from pkg/interface/src/store/global.js
rename to pkg/interface/src/logic/store/global.js
diff --git a/pkg/interface/src/store/groups.js b/pkg/interface/src/logic/store/groups.js
similarity index 100%
rename from pkg/interface/src/store/groups.js
rename to pkg/interface/src/logic/store/groups.js
diff --git a/pkg/interface/src/store/launch.js b/pkg/interface/src/logic/store/launch.js
similarity index 100%
rename from pkg/interface/src/store/launch.js
rename to pkg/interface/src/logic/store/launch.js
diff --git a/pkg/interface/src/store/links.js b/pkg/interface/src/logic/store/links.js
similarity index 100%
rename from pkg/interface/src/store/links.js
rename to pkg/interface/src/logic/store/links.js
diff --git a/pkg/interface/src/store/publish.js b/pkg/interface/src/logic/store/publish.js
similarity index 100%
rename from pkg/interface/src/store/publish.js
rename to pkg/interface/src/logic/store/publish.js
diff --git a/pkg/interface/src/store/store.ts b/pkg/interface/src/logic/store/store.ts
similarity index 100%
rename from pkg/interface/src/store/store.ts
rename to pkg/interface/src/logic/store/store.ts
diff --git a/pkg/interface/src/store/type.ts b/pkg/interface/src/logic/store/type.ts
similarity index 100%
rename from pkg/interface/src/store/type.ts
rename to pkg/interface/src/logic/store/type.ts
diff --git a/pkg/interface/src/subscription/base.ts b/pkg/interface/src/logic/subscription/base.ts
similarity index 100%
rename from pkg/interface/src/subscription/base.ts
rename to pkg/interface/src/logic/subscription/base.ts
diff --git a/pkg/interface/src/subscription/global.ts b/pkg/interface/src/logic/subscription/global.ts
similarity index 100%
rename from pkg/interface/src/subscription/global.ts
rename to pkg/interface/src/logic/subscription/global.ts
diff --git a/pkg/interface/src/App.js b/pkg/interface/src/views/App.js
similarity index 94%
rename from pkg/interface/src/App.js
rename to pkg/interface/src/views/App.js
index 23301f95a..ba9e816d2 100644
--- a/pkg/interface/src/App.js
+++ b/pkg/interface/src/views/App.js
@@ -18,11 +18,11 @@ import StatusBar from './components/StatusBar';
import Omnibox from './components/Omnibox';
import ErrorComponent from './components/Error';
-import GlobalStore from './store/store';
-import GlobalSubscription from './subscription/global';
-import GlobalApi from './api/global';
-import { uxToHex } from './lib/util';
-import { Sigil } from './lib/sigil';
+import GlobalStore from '../logic/store/store';
+import GlobalSubscription from '../logic/subscription/global';
+import GlobalApi from '../logic/api/global';
+import { uxToHex } from '../logic/lib/util';
+import { Sigil } from '../logic/lib/sigil';
const Root = styled.div`
font-family: ${p => p.theme.fonts.sans};
diff --git a/pkg/interface/src/apps/chat/app.tsx b/pkg/interface/src/views/apps/chat/app.tsx
similarity index 97%
rename from pkg/interface/src/apps/chat/app.tsx
rename to pkg/interface/src/views/apps/chat/app.tsx
index 8ccaabd46..ea8e97ad0 100644
--- a/pkg/interface/src/apps/chat/app.tsx
+++ b/pkg/interface/src/views/apps/chat/app.tsx
@@ -11,11 +11,11 @@ import { SettingsScreen } from './components/settings';
import { NewScreen } from './components/new';
import { JoinScreen } from './components/join';
import { NewDmScreen } from './components/new-dm';
-import { PatpNoSig } from '../../types/noun';
-import GlobalApi from '../../api/global';
-import { StoreState } from '../../store/type';
-import GlobalSubscription from '../../subscription/global';
-import {groupBunts} from '../../types/group-update';
+import { PatpNoSig } from '../../../types/noun';
+import GlobalApi from '../../logic/api/global';
+import { StoreState } from '../../logic/store/type';
+import GlobalSubscription from '../../logic/subscription/global';
+import {groupBunts} from '../../../types/group-update';
type ChatAppProps = StoreState & {
ship: PatpNoSig;
diff --git a/pkg/interface/src/apps/chat/components/chat.tsx b/pkg/interface/src/views/apps/chat/components/chat.tsx
similarity index 88%
rename from pkg/interface/src/apps/chat/components/chat.tsx
rename to pkg/interface/src/views/apps/chat/components/chat.tsx
index 6a06135ff..46da1a334 100644
--- a/pkg/interface/src/apps/chat/components/chat.tsx
+++ b/pkg/interface/src/views/apps/chat/components/chat.tsx
@@ -6,15 +6,15 @@ import { Link, RouteComponentProps } from "react-router-dom";
import { ChatWindow } from './lib/chat-window';
import { ChatHeader } from './lib/chat-header';
import { ChatInput } from "./lib/chat-input";
-import { deSig } from "../../../lib/util";
-import { ChatHookUpdate } from "../../../types/chat-hook-update";
-import ChatApi from "../../../api/chat";
-import { Inbox, Envelope } from "../../../types/chat-update";
-import { Contacts } from "../../../types/contact-update";
-import { Path, Patp } from "../../../types/noun";
-import GlobalApi from "../../../api/global";
-import { Association } from "../../../types/metadata-update";
-import {Group} from "../../../types/group-update";
+import { deSig } from "../../../../logic/lib/util";
+import { ChatHookUpdate } from "../../../../types/chat-hook-update";
+import ChatApi from "../../../../logic/api/chat";
+import { Inbox, Envelope } from "../../../../types/chat-update";
+import { Contacts } from "../../../../types/contact-update";
+import { Path, Patp } from "../../../../types/noun";
+import GlobalApi from "../../../../logic/api/global";
+import { Association } from "../../../../types/metadata-update";
+import {Group} from "../../../../types/group-update";
type ChatScreenProps = RouteComponentProps<{
diff --git a/pkg/interface/src/apps/chat/components/join.js b/pkg/interface/src/views/apps/chat/components/join.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/join.js
rename to pkg/interface/src/views/apps/chat/components/join.js
diff --git a/pkg/interface/src/apps/chat/components/lib/backlog-element.js b/pkg/interface/src/views/apps/chat/components/lib/backlog-element.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/backlog-element.js
rename to pkg/interface/src/views/apps/chat/components/lib/backlog-element.js
diff --git a/pkg/interface/src/apps/chat/components/lib/channel-item.js b/pkg/interface/src/views/apps/chat/components/lib/channel-item.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/channel-item.js
rename to pkg/interface/src/views/apps/chat/components/lib/channel-item.js
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-editor.js b/pkg/interface/src/views/apps/chat/components/lib/chat-editor.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/chat-editor.js
rename to pkg/interface/src/views/apps/chat/components/lib/chat-editor.js
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-header.js b/pkg/interface/src/views/apps/chat/components/lib/chat-header.js
similarity index 96%
rename from pkg/interface/src/apps/chat/components/lib/chat-header.js
rename to pkg/interface/src/views/apps/chat/components/lib/chat-header.js
index 4c20a5e25..ae503ee09 100644
--- a/pkg/interface/src/apps/chat/components/lib/chat-header.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/chat-header.js
@@ -3,7 +3,7 @@ import { Link } from "react-router-dom";
import { ChatTabBar } from "./chat-tabbar";
import { SidebarSwitcher } from "../../../../components/SidebarSwitch";
-import { deSig } from "../../../../lib/util";
+import { deSig } from "../../../../../logic/lib/util";
export const ChatHeader = (props) => {
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-input.js b/pkg/interface/src/views/apps/chat/components/lib/chat-input.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/chat-input.js
rename to pkg/interface/src/views/apps/chat/components/lib/chat-input.js
index 8223ac47c..c18beb8d9 100644
--- a/pkg/interface/src/apps/chat/components/lib/chat-input.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/chat-input.js
@@ -1,8 +1,9 @@
import React, { Component } from 'react';
-import { Sigil } from '../../../../lib/sigil';
import ChatEditor from './chat-editor';
-import { S3Upload } from './s3-upload';
-import { uxToHex } from '../../../../lib/util';
+import { S3Upload } from './s3-upload'
+;
+import { uxToHex } from '../../../../../logic/lib/util';
+import { Sigil } from '../../../../../logic/lib/sigil';
const URL_REGEX = new RegExp(String(/^((\w+:\/\/)[-a-zA-Z0-9:@;?&=\/%\+\.\*!'\(\),\$_\{\}\^~\[\]`#|]+)/.source));
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-message.tsx b/pkg/interface/src/views/apps/chat/components/lib/chat-message.tsx
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/chat-message.tsx
rename to pkg/interface/src/views/apps/chat/components/lib/chat-message.tsx
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-scroll-container.js b/pkg/interface/src/views/apps/chat/components/lib/chat-scroll-container.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/chat-scroll-container.js
rename to pkg/interface/src/views/apps/chat/components/lib/chat-scroll-container.js
index 68b0872c4..a0a531feb 100644
--- a/pkg/interface/src/apps/chat/components/lib/chat-scroll-container.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/chat-scroll-container.js
@@ -1,6 +1,6 @@
import React, { Component, Fragment } from "react";
-import { scrollIsAtTop, scrollIsAtBottom } from "../../../../lib/util";
+import { scrollIsAtTop, scrollIsAtBottom } from "../../../../../logic/lib/util";
// Restore chat position on FF when new messages come in
const recalculateScrollTop = (lastScrollHeight, scrollContainer) => {
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-tabbar.js b/pkg/interface/src/views/apps/chat/components/lib/chat-tabbar.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/chat-tabbar.js
rename to pkg/interface/src/views/apps/chat/components/lib/chat-tabbar.js
diff --git a/pkg/interface/src/apps/chat/components/lib/chat-window.tsx b/pkg/interface/src/views/apps/chat/components/lib/chat-window.tsx
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/chat-window.tsx
rename to pkg/interface/src/views/apps/chat/components/lib/chat-window.tsx
diff --git a/pkg/interface/src/apps/chat/components/lib/content/code.js b/pkg/interface/src/views/apps/chat/components/lib/content/code.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/content/code.js
rename to pkg/interface/src/views/apps/chat/components/lib/content/code.js
diff --git a/pkg/interface/src/apps/chat/components/lib/content/text.js b/pkg/interface/src/views/apps/chat/components/lib/content/text.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/content/text.js
rename to pkg/interface/src/views/apps/chat/components/lib/content/text.js
diff --git a/pkg/interface/src/apps/chat/components/lib/content/url.js b/pkg/interface/src/views/apps/chat/components/lib/content/url.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/content/url.js
rename to pkg/interface/src/views/apps/chat/components/lib/content/url.js
diff --git a/pkg/interface/src/apps/chat/components/lib/delete-button.js b/pkg/interface/src/views/apps/chat/components/lib/delete-button.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/delete-button.js
rename to pkg/interface/src/views/apps/chat/components/lib/delete-button.js
diff --git a/pkg/interface/src/apps/chat/components/lib/group-item.js b/pkg/interface/src/views/apps/chat/components/lib/group-item.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/group-item.js
rename to pkg/interface/src/views/apps/chat/components/lib/group-item.js
diff --git a/pkg/interface/src/apps/chat/components/lib/groupify-button.js b/pkg/interface/src/views/apps/chat/components/lib/groupify-button.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/groupify-button.js
rename to pkg/interface/src/views/apps/chat/components/lib/groupify-button.js
diff --git a/pkg/interface/src/apps/chat/components/lib/invite-element.js b/pkg/interface/src/views/apps/chat/components/lib/invite-element.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/invite-element.js
rename to pkg/interface/src/views/apps/chat/components/lib/invite-element.js
diff --git a/pkg/interface/src/apps/chat/components/lib/member-element.js b/pkg/interface/src/views/apps/chat/components/lib/member-element.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/member-element.js
rename to pkg/interface/src/views/apps/chat/components/lib/member-element.js
diff --git a/pkg/interface/src/apps/chat/components/lib/message-content.js b/pkg/interface/src/views/apps/chat/components/lib/message-content.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/message-content.js
rename to pkg/interface/src/views/apps/chat/components/lib/message-content.js
diff --git a/pkg/interface/src/apps/chat/components/lib/message.js b/pkg/interface/src/views/apps/chat/components/lib/message.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/message.js
rename to pkg/interface/src/views/apps/chat/components/lib/message.js
index f4b6b5729..4958490bb 100644
--- a/pkg/interface/src/apps/chat/components/lib/message.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/message.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import { OverlaySigil } from './overlay-sigil';
import MessageContent from './message-content';
-import { uxToHex, cite, writeText } from '../../../../lib/util';
+import { uxToHex, cite, writeText } from '../../../../../logic/lib/util';
import moment from 'moment';
diff --git a/pkg/interface/src/apps/chat/components/lib/metadata-color.js b/pkg/interface/src/views/apps/chat/components/lib/metadata-color.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/metadata-color.js
rename to pkg/interface/src/views/apps/chat/components/lib/metadata-color.js
index 5faadf253..82c30563f 100644
--- a/pkg/interface/src/apps/chat/components/lib/metadata-color.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/metadata-color.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
-import { uxToHex } from '../../../../lib/util';
+import { uxToHex } from '../../../../../logic/lib/util';
export class MetadataColor extends Component {
diff --git a/pkg/interface/src/apps/chat/components/lib/metadata-input.js b/pkg/interface/src/views/apps/chat/components/lib/metadata-input.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/metadata-input.js
rename to pkg/interface/src/views/apps/chat/components/lib/metadata-input.js
diff --git a/pkg/interface/src/apps/chat/components/lib/metadata-settings.js b/pkg/interface/src/views/apps/chat/components/lib/metadata-settings.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/metadata-settings.js
rename to pkg/interface/src/views/apps/chat/components/lib/metadata-settings.js
index cd8a18c49..f396e5fd7 100644
--- a/pkg/interface/src/apps/chat/components/lib/metadata-settings.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/metadata-settings.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { MetadataColor } from './metadata-color';
import { MetadataInput } from './metadata-input';
-import { uxToHex } from '../../../../lib/util';
+import { uxToHex } from '../../../../../logic/lib/util';
export const MetadataSettings = (props) => {
diff --git a/pkg/interface/src/apps/chat/components/lib/overlay-sigil.js b/pkg/interface/src/views/apps/chat/components/lib/overlay-sigil.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/overlay-sigil.js
rename to pkg/interface/src/views/apps/chat/components/lib/overlay-sigil.js
index 5b2cc3c21..523835b04 100644
--- a/pkg/interface/src/apps/chat/components/lib/overlay-sigil.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/overlay-sigil.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react';
-import { Sigil } from '../../../../lib/sigil';
+import { Sigil } from '../../../../../logic/lib/sigil';
import {
ProfileOverlay,
OVERLAY_HEIGHT
diff --git a/pkg/interface/src/apps/chat/components/lib/profile-overlay.js b/pkg/interface/src/views/apps/chat/components/lib/profile-overlay.js
similarity index 96%
rename from pkg/interface/src/apps/chat/components/lib/profile-overlay.js
rename to pkg/interface/src/views/apps/chat/components/lib/profile-overlay.js
index b9a690bd7..5168049bc 100644
--- a/pkg/interface/src/apps/chat/components/lib/profile-overlay.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/profile-overlay.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
-import { cite } from '../../../../lib/util';
-import { Sigil } from '../../../../lib/sigil';
+import { cite } from '../../../../../logic/lib/util';
+import { Sigil } from '../../../../../logic/lib/sigil';
export const OVERLAY_HEIGHT = 250;
diff --git a/pkg/interface/src/apps/chat/components/lib/resubscribe-element.js b/pkg/interface/src/views/apps/chat/components/lib/resubscribe-element.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/resubscribe-element.js
rename to pkg/interface/src/views/apps/chat/components/lib/resubscribe-element.js
diff --git a/pkg/interface/src/apps/chat/components/lib/s3-upload.js b/pkg/interface/src/views/apps/chat/components/lib/s3-upload.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/lib/s3-upload.js
rename to pkg/interface/src/views/apps/chat/components/lib/s3-upload.js
index f7a604a0e..c6361168e 100644
--- a/pkg/interface/src/apps/chat/components/lib/s3-upload.js
+++ b/pkg/interface/src/views/apps/chat/components/lib/s3-upload.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react';
-import S3Client from '../../../../lib/s3';
+import S3Client from '../../../../../logic/lib/s3';
export class S3Upload extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/chat/components/lib/ship-search.js b/pkg/interface/src/views/apps/chat/components/lib/ship-search.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/ship-search.js
rename to pkg/interface/src/views/apps/chat/components/lib/ship-search.js
diff --git a/pkg/interface/src/apps/chat/components/lib/unread-notice.js b/pkg/interface/src/views/apps/chat/components/lib/unread-notice.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/unread-notice.js
rename to pkg/interface/src/views/apps/chat/components/lib/unread-notice.js
diff --git a/pkg/interface/src/apps/chat/components/lib/welcome.js b/pkg/interface/src/views/apps/chat/components/lib/welcome.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/lib/welcome.js
rename to pkg/interface/src/views/apps/chat/components/lib/welcome.js
diff --git a/pkg/interface/src/apps/chat/components/new-dm.js b/pkg/interface/src/views/apps/chat/components/new-dm.js
similarity index 99%
rename from pkg/interface/src/apps/chat/components/new-dm.js
rename to pkg/interface/src/views/apps/chat/components/new-dm.js
index 7c2124412..ef9979394 100644
--- a/pkg/interface/src/apps/chat/components/new-dm.js
+++ b/pkg/interface/src/views/apps/chat/components/new-dm.js
@@ -3,7 +3,7 @@ import { Spinner } from '../../../components/Spinner';
import { Link } from 'react-router-dom';
import { InviteSearch } from '../../../components/InviteSearch';
import urbitOb from 'urbit-ob';
-import { deSig } from '../../../lib/util';
+import { deSig } from '../../../../logic/lib/util';
export class NewDmScreen extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/chat/components/new.js b/pkg/interface/src/views/apps/chat/components/new.js
similarity index 99%
rename from pkg/interface/src/apps/chat/components/new.js
rename to pkg/interface/src/views/apps/chat/components/new.js
index 97f7c992d..15311206d 100644
--- a/pkg/interface/src/apps/chat/components/new.js
+++ b/pkg/interface/src/views/apps/chat/components/new.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { InviteSearch } from '../../../components/InviteSearch';
import { Spinner } from '../../../components/Spinner';
import { Link } from 'react-router-dom';
-import { deSig } from '../../../lib/util';
+import { deSig } from '../../../../logic/lib/util';
export class NewScreen extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/chat/components/settings.js b/pkg/interface/src/views/apps/chat/components/settings.js
similarity index 98%
rename from pkg/interface/src/apps/chat/components/settings.js
rename to pkg/interface/src/views/apps/chat/components/settings.js
index d0e4716ae..ea78bfa07 100644
--- a/pkg/interface/src/apps/chat/components/settings.js
+++ b/pkg/interface/src/views/apps/chat/components/settings.js
@@ -1,5 +1,5 @@
import React, { Component, Fragment } from 'react';
-import { deSig } from '../../../lib/util';
+import { deSig } from '../../../../logic/lib/util';
import { Link } from 'react-router-dom';
import { ChatHeader } from './lib/chat-header';
diff --git a/pkg/interface/src/apps/chat/components/sidebar.js b/pkg/interface/src/views/apps/chat/components/sidebar.js
similarity index 97%
rename from pkg/interface/src/apps/chat/components/sidebar.js
rename to pkg/interface/src/views/apps/chat/components/sidebar.js
index 95abbca9a..39f191990 100644
--- a/pkg/interface/src/apps/chat/components/sidebar.js
+++ b/pkg/interface/src/views/apps/chat/components/sidebar.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import Welcome from './lib/welcome';
-import { alphabetiseAssociations } from '../../../lib/util';
+import { alphabetiseAssociations } from '../../../../logic/lib/util';
import SidebarInvite from '../../../components/SidebarInvite';
import { GroupItem } from './lib/group-item';
diff --git a/pkg/interface/src/apps/chat/components/skeleton.js b/pkg/interface/src/views/apps/chat/components/skeleton.js
similarity index 100%
rename from pkg/interface/src/apps/chat/components/skeleton.js
rename to pkg/interface/src/views/apps/chat/components/skeleton.js
diff --git a/pkg/interface/src/apps/chat/css/custom.css b/pkg/interface/src/views/apps/chat/css/custom.css
similarity index 100%
rename from pkg/interface/src/apps/chat/css/custom.css
rename to pkg/interface/src/views/apps/chat/css/custom.css
diff --git a/pkg/interface/src/apps/dojo/api.js b/pkg/interface/src/views/apps/dojo/api.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/api.js
rename to pkg/interface/src/views/apps/dojo/api.js
diff --git a/pkg/interface/src/apps/dojo/app.js b/pkg/interface/src/views/apps/dojo/app.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/app.js
rename to pkg/interface/src/views/apps/dojo/app.js
diff --git a/pkg/interface/src/apps/dojo/components/history.js b/pkg/interface/src/views/apps/dojo/components/history.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/components/history.js
rename to pkg/interface/src/views/apps/dojo/components/history.js
diff --git a/pkg/interface/src/apps/dojo/components/input.js b/pkg/interface/src/views/apps/dojo/components/input.js
similarity index 98%
rename from pkg/interface/src/apps/dojo/components/input.js
rename to pkg/interface/src/views/apps/dojo/components/input.js
index d043b9761..4bde441c8 100644
--- a/pkg/interface/src/apps/dojo/components/input.js
+++ b/pkg/interface/src/views/apps/dojo/components/input.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react';
-import { cite } from '../../../lib/util';
+import { cite } from '../../../../logic/lib/util';
import { Spinner } from '../../../components/Spinner';
export class Input extends Component {
diff --git a/pkg/interface/src/apps/dojo/components/lib/icons/popout.js b/pkg/interface/src/views/apps/dojo/components/lib/icons/popout.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/components/lib/icons/popout.js
rename to pkg/interface/src/views/apps/dojo/components/lib/icons/popout.js
diff --git a/pkg/interface/src/apps/dojo/components/lib/sole.js b/pkg/interface/src/views/apps/dojo/components/lib/sole.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/components/lib/sole.js
rename to pkg/interface/src/views/apps/dojo/components/lib/sole.js
diff --git a/pkg/interface/src/apps/dojo/css/custom.css b/pkg/interface/src/views/apps/dojo/css/custom.css
similarity index 100%
rename from pkg/interface/src/apps/dojo/css/custom.css
rename to pkg/interface/src/views/apps/dojo/css/custom.css
diff --git a/pkg/interface/src/apps/dojo/store.js b/pkg/interface/src/views/apps/dojo/store.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/store.js
rename to pkg/interface/src/views/apps/dojo/store.js
diff --git a/pkg/interface/src/apps/dojo/subscription.js b/pkg/interface/src/views/apps/dojo/subscription.js
similarity index 100%
rename from pkg/interface/src/apps/dojo/subscription.js
rename to pkg/interface/src/views/apps/dojo/subscription.js
diff --git a/pkg/interface/src/apps/groups/app.tsx b/pkg/interface/src/views/apps/groups/app.tsx
similarity index 98%
rename from pkg/interface/src/apps/groups/app.tsx
rename to pkg/interface/src/views/apps/groups/app.tsx
index cefd0d6ec..7ef051119 100644
--- a/pkg/interface/src/apps/groups/app.tsx
+++ b/pkg/interface/src/views/apps/groups/app.tsx
@@ -11,10 +11,10 @@ import { AddScreen } from './components/lib/add-contact';
import { JoinScreen } from './components/join';
import GroupDetail from './components/lib/group-detail';
-import { PatpNoSig } from '../../types/noun';
-import GlobalApi from '../../api/global';
-import { StoreState } from '../../store/type';
-import GlobalSubscription from '../../subscription/global';
+import { PatpNoSig } from '../../../types/noun';
+import GlobalApi from '../../../logic/api/global';
+import { StoreState } from '../../../logic/store/type';
+import GlobalSubscription from '../../../logic/subscription/global';
type GroupsAppProps = StoreState & {
diff --git a/pkg/interface/src/apps/groups/components/join.js b/pkg/interface/src/views/apps/groups/components/join.js
similarity index 100%
rename from pkg/interface/src/apps/groups/components/join.js
rename to pkg/interface/src/views/apps/groups/components/join.js
diff --git a/pkg/interface/src/apps/groups/components/lib/add-contact.tsx b/pkg/interface/src/views/apps/groups/components/lib/add-contact.tsx
similarity index 100%
rename from pkg/interface/src/apps/groups/components/lib/add-contact.tsx
rename to pkg/interface/src/views/apps/groups/components/lib/add-contact.tsx
diff --git a/pkg/interface/src/apps/groups/components/lib/contact-card.js b/pkg/interface/src/views/apps/groups/components/lib/contact-card.js
similarity index 99%
rename from pkg/interface/src/apps/groups/components/lib/contact-card.js
rename to pkg/interface/src/views/apps/groups/components/lib/contact-card.js
index 2402ea400..9782f89ac 100644
--- a/pkg/interface/src/apps/groups/components/lib/contact-card.js
+++ b/pkg/interface/src/views/apps/groups/components/lib/contact-card.js
@@ -1,10 +1,10 @@
import React, { Component } from 'react';
-import { Sigil } from '../../../../lib/sigil';
+import { Sigil } from '../../../../../logic/lib/sigil';
import { Link } from 'react-router-dom';
import { EditElement } from './edit-element';
import { Spinner } from '../../../../components/Spinner';
-import { uxToHex } from '../../../../lib/util';
+import { uxToHex } from '../../../../../logic/lib/util';
import { S3Upload } from './s3-upload';
export class ContactCard extends Component {
diff --git a/pkg/interface/src/apps/groups/components/lib/contact-item.js b/pkg/interface/src/views/apps/groups/components/lib/contact-item.js
similarity index 91%
rename from pkg/interface/src/apps/groups/components/lib/contact-item.js
rename to pkg/interface/src/views/apps/groups/components/lib/contact-item.js
index cfc104cc6..35e3a6a54 100644
--- a/pkg/interface/src/apps/groups/components/lib/contact-item.js
+++ b/pkg/interface/src/views/apps/groups/components/lib/contact-item.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
-import { Sigil } from '../../../../lib/sigil';
-import { uxToHex, cite } from '../../../../lib/util';
+import { Sigil } from '../../../../../logic/lib/sigil';
+import { uxToHex, cite } from '../../../../../logic/lib/util';
export class ContactItem extends Component {
render() {
diff --git a/pkg/interface/src/apps/groups/components/lib/contact-sidebar.tsx b/pkg/interface/src/views/apps/groups/components/lib/contact-sidebar.tsx
similarity index 93%
rename from pkg/interface/src/apps/groups/components/lib/contact-sidebar.tsx
rename to pkg/interface/src/views/apps/groups/components/lib/contact-sidebar.tsx
index d515b04b1..d8445b708 100644
--- a/pkg/interface/src/apps/groups/components/lib/contact-sidebar.tsx
+++ b/pkg/interface/src/views/apps/groups/components/lib/contact-sidebar.tsx
@@ -4,14 +4,14 @@ import { FixedSizeList as List } from 'react-window';
import { ContactItem } from './contact-item';
import { ShareSheet } from './share-sheet';
-import { Sigil } from '../../../../lib/sigil';
+import { Sigil } from '../../../../../logic/lib/sigil';
import { Spinner } from '../../../../components/Spinner';
-import { cite } from '../../../../lib/util';
-import { roleForShip, resourceFromPath } from '../../../../lib/group';
-import { Path, PatpNoSig } from '../../../../types/noun';
-import { Rolodex, Contacts, Contact } from '../../../../types/contact-update';
-import { Groups, Group } from '../../../../types/group-update';
-import GlobalApi from '../../../../api/global';
+import { cite } from '../../../../../logic/lib/util';
+import { roleForShip, resourceFromPath } from '../../../../../logic/lib/group';
+import { Path, PatpNoSig } from '../../../../../types/noun';
+import { Rolodex, Contacts, Contact } from '../../../../../types/contact-update';
+import { Groups, Group } from '../../../../../types/group-update';
+import GlobalApi from '../../../../../logic/api/global';
interface ContactSidebarProps {
activeDrawer: 'contacts' | 'detail' | 'rightPanel';
diff --git a/pkg/interface/src/apps/groups/components/lib/edit-element.js b/pkg/interface/src/views/apps/groups/components/lib/edit-element.js
similarity index 100%
rename from pkg/interface/src/apps/groups/components/lib/edit-element.js
rename to pkg/interface/src/views/apps/groups/components/lib/edit-element.js
diff --git a/pkg/interface/src/apps/groups/components/lib/group-detail.js b/pkg/interface/src/views/apps/groups/components/lib/group-detail.js
similarity index 98%
rename from pkg/interface/src/apps/groups/components/lib/group-detail.js
rename to pkg/interface/src/views/apps/groups/components/lib/group-detail.js
index fce7d77e5..17bdeaf25 100644
--- a/pkg/interface/src/apps/groups/components/lib/group-detail.js
+++ b/pkg/interface/src/views/apps/groups/components/lib/group-detail.js
@@ -3,8 +3,9 @@ import { Link } from 'react-router-dom';
import { Spinner } from '../../../../components/Spinner';
import { Toggle } from '../../../../components/toggle';
import { GroupView } from '../../../../components/Group';
-import { deSig, uxToHex, writeText } from '../../../../lib/util';
-import { roleForShip, resourceFromPath } from '../../../../lib/group';
+
+import { deSig, uxToHex, writeText } from '../../../../../logic/lib/util';
+import { roleForShip, resourceFromPath } from '../../../../../logic/lib/group';
export class GroupDetail extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/groups/components/lib/group-item.js b/pkg/interface/src/views/apps/groups/components/lib/group-item.js
similarity index 100%
rename from pkg/interface/src/apps/groups/components/lib/group-item.js
rename to pkg/interface/src/views/apps/groups/components/lib/group-item.js
diff --git a/pkg/interface/src/apps/groups/components/lib/group-sidebar.js b/pkg/interface/src/views/apps/groups/components/lib/group-sidebar.js
similarity index 97%
rename from pkg/interface/src/apps/groups/components/lib/group-sidebar.js
rename to pkg/interface/src/views/apps/groups/components/lib/group-sidebar.js
index b000eca47..4c6cbe5a1 100644
--- a/pkg/interface/src/apps/groups/components/lib/group-sidebar.js
+++ b/pkg/interface/src/views/apps/groups/components/lib/group-sidebar.js
@@ -2,11 +2,12 @@ import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { GroupItem } from './group-item';
-import { Sigil } from '../../../../lib/sigil';
import SidebarInvite from '../../../../components/SidebarInvite';
import { Welcome } from './welcome';
-import { cite } from '../../../../lib/util';
+import { cite } from '../../../../../logic/lib/util';
+import { Sigil } from '../../../../../logic/lib/sigil';
+
export class GroupSidebar extends Component {
// drawer to the left
diff --git a/pkg/interface/src/apps/groups/components/lib/s3-upload.js b/pkg/interface/src/views/apps/groups/components/lib/s3-upload.js
similarity index 97%
rename from pkg/interface/src/apps/groups/components/lib/s3-upload.js
rename to pkg/interface/src/views/apps/groups/components/lib/s3-upload.js
index ead7cb7e6..1231aa435 100644
--- a/pkg/interface/src/apps/groups/components/lib/s3-upload.js
+++ b/pkg/interface/src/views/apps/groups/components/lib/s3-upload.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react'
-import S3Client from '../../../../lib/s3';
+import S3Client from '../../../../../logic/lib/s3';
export class S3Upload extends Component {
diff --git a/pkg/interface/src/apps/groups/components/lib/share-sheet.js b/pkg/interface/src/views/apps/groups/components/lib/share-sheet.js
similarity index 100%
rename from pkg/interface/src/apps/groups/components/lib/share-sheet.js
rename to pkg/interface/src/views/apps/groups/components/lib/share-sheet.js
diff --git a/pkg/interface/src/apps/groups/components/lib/welcome.js b/pkg/interface/src/views/apps/groups/components/lib/welcome.js
similarity index 100%
rename from pkg/interface/src/apps/groups/components/lib/welcome.js
rename to pkg/interface/src/views/apps/groups/components/lib/welcome.js
diff --git a/pkg/interface/src/apps/groups/components/new.tsx b/pkg/interface/src/views/apps/groups/components/new.tsx
similarity index 95%
rename from pkg/interface/src/apps/groups/components/new.tsx
rename to pkg/interface/src/views/apps/groups/components/new.tsx
index d36c16d38..4e16c69fb 100644
--- a/pkg/interface/src/apps/groups/components/new.tsx
+++ b/pkg/interface/src/views/apps/groups/components/new.tsx
@@ -5,10 +5,11 @@ import { InviteSearch, Invites } from '../../../components/InviteSearch';
import { Spinner } from '../../../components/Spinner';
import { Toggle } from '../../../components/toggle';
import { RouteComponentProps } from 'react-router-dom';
-import { Groups, GroupPolicy, Resource } from '../../../types/group-update';
-import { Contacts, Rolodex } from '../../../types/contact-update';
-import GlobalApi from '../../../api/global';
-import { Patp, PatpNoSig, Enc } from '../../../types/noun';
+
+import { Groups, GroupPolicy, Resource } from '../../../../types/group-update';
+import { Contacts, Rolodex } from '../../../../types/contact-update';
+import GlobalApi from '../../../../logic/api/global';
+import { Patp, PatpNoSig, Enc } from '../../../../types/noun';
type NewScreenProps = Pick & {
groups: Groups;
diff --git a/pkg/interface/src/apps/groups/components/skeleton.js b/pkg/interface/src/views/apps/groups/components/skeleton.js
similarity index 100%
rename from pkg/interface/src/apps/groups/components/skeleton.js
rename to pkg/interface/src/views/apps/groups/components/skeleton.js
diff --git a/pkg/interface/src/apps/groups/css/custom.css b/pkg/interface/src/views/apps/groups/css/custom.css
similarity index 100%
rename from pkg/interface/src/apps/groups/css/custom.css
rename to pkg/interface/src/views/apps/groups/css/custom.css
diff --git a/pkg/interface/src/apps/launch/app.js b/pkg/interface/src/views/apps/launch/app.js
similarity index 100%
rename from pkg/interface/src/apps/launch/app.js
rename to pkg/interface/src/views/apps/launch/app.js
diff --git a/pkg/interface/src/apps/launch/components/tiles.js b/pkg/interface/src/views/apps/launch/components/tiles.js
similarity index 100%
rename from pkg/interface/src/apps/launch/components/tiles.js
rename to pkg/interface/src/views/apps/launch/components/tiles.js
diff --git a/pkg/interface/src/apps/launch/components/tiles/basic.js b/pkg/interface/src/views/apps/launch/components/tiles/basic.js
similarity index 95%
rename from pkg/interface/src/apps/launch/components/tiles/basic.js
rename to pkg/interface/src/views/apps/launch/components/tiles/basic.js
index f6b3790ad..d091e4193 100644
--- a/pkg/interface/src/apps/launch/components/tiles/basic.js
+++ b/pkg/interface/src/views/apps/launch/components/tiles/basic.js
@@ -1,7 +1,7 @@
import React from 'react';
import classnames from 'classnames';
import { Link } from 'react-router-dom';
-import defaultApps from '../../../../lib/default-apps';
+import defaultApps from '../../../../../logic/lib/default-apps';
import Tile from './tile';
diff --git a/pkg/interface/src/apps/launch/components/tiles/clock.js b/pkg/interface/src/views/apps/launch/components/tiles/clock.js
similarity index 100%
rename from pkg/interface/src/apps/launch/components/tiles/clock.js
rename to pkg/interface/src/views/apps/launch/components/tiles/clock.js
diff --git a/pkg/interface/src/apps/launch/components/tiles/custom.js b/pkg/interface/src/views/apps/launch/components/tiles/custom.js
similarity index 100%
rename from pkg/interface/src/apps/launch/components/tiles/custom.js
rename to pkg/interface/src/views/apps/launch/components/tiles/custom.js
diff --git a/pkg/interface/src/apps/launch/components/tiles/tile.js b/pkg/interface/src/views/apps/launch/components/tiles/tile.js
similarity index 100%
rename from pkg/interface/src/apps/launch/components/tiles/tile.js
rename to pkg/interface/src/views/apps/launch/components/tiles/tile.js
diff --git a/pkg/interface/src/apps/launch/components/tiles/weather.js b/pkg/interface/src/views/apps/launch/components/tiles/weather.js
similarity index 100%
rename from pkg/interface/src/apps/launch/components/tiles/weather.js
rename to pkg/interface/src/views/apps/launch/components/tiles/weather.js
diff --git a/pkg/interface/src/apps/launch/components/welcome.js b/pkg/interface/src/views/apps/launch/components/welcome.js
similarity index 100%
rename from pkg/interface/src/apps/launch/components/welcome.js
rename to pkg/interface/src/views/apps/launch/components/welcome.js
diff --git a/pkg/interface/src/apps/launch/css/custom.css b/pkg/interface/src/views/apps/launch/css/custom.css
similarity index 100%
rename from pkg/interface/src/apps/launch/css/custom.css
rename to pkg/interface/src/views/apps/launch/css/custom.css
diff --git a/pkg/interface/src/apps/links/app.js b/pkg/interface/src/views/apps/links/app.js
similarity index 99%
rename from pkg/interface/src/apps/links/app.js
rename to pkg/interface/src/views/apps/links/app.js
index 0f1522e72..baa7629d8 100644
--- a/pkg/interface/src/apps/links/app.js
+++ b/pkg/interface/src/views/apps/links/app.js
@@ -12,7 +12,11 @@ import { SettingsScreen } from './components/settings';
import { MessageScreen } from './components/lib/message-screen';
import { Links } from './components/links-list';
import { LinkDetail } from './components/link';
-import { makeRoutePath, amOwnerOfGroup, base64urlDecode } from '../../lib/util';
+import {
+ makeRoutePath,
+ amOwnerOfGroup,
+ base64urlDecode
+} from '../../../logic/lib/util';
export class LinksApp extends Component {
diff --git a/pkg/interface/src/apps/links/components/lib/channel-sidebar.js b/pkg/interface/src/views/apps/links/components/lib/channel-sidebar.js
similarity index 97%
rename from pkg/interface/src/apps/links/components/lib/channel-sidebar.js
rename to pkg/interface/src/views/apps/links/components/lib/channel-sidebar.js
index e33960d3b..2d1a82fd4 100644
--- a/pkg/interface/src/apps/links/components/lib/channel-sidebar.js
+++ b/pkg/interface/src/views/apps/links/components/lib/channel-sidebar.js
@@ -4,7 +4,7 @@ import { Link } from 'react-router-dom';
import { GroupItem } from './group-item';
import SidebarInvite from '../../../../components/SidebarInvite';
import { Welcome } from './welcome';
-import { alphabetiseAssociations } from '../../../../lib/util';
+import { alphabetiseAssociations } from '../../../../../logic/lib/util';
export class ChannelsSidebar extends Component {
// drawer to the left
diff --git a/pkg/interface/src/apps/links/components/lib/channels-item.js b/pkg/interface/src/views/apps/links/components/lib/channels-item.js
similarity index 92%
rename from pkg/interface/src/apps/links/components/lib/channels-item.js
rename to pkg/interface/src/views/apps/links/components/lib/channels-item.js
index e0693845c..fce816b73 100644
--- a/pkg/interface/src/apps/links/components/lib/channels-item.js
+++ b/pkg/interface/src/views/apps/links/components/lib/channels-item.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
-import { makeRoutePath } from '../../../../lib/util';
+import { makeRoutePath } from '../../../../../logic/lib/util';
export class ChannelsItem extends Component {
render() {
diff --git a/pkg/interface/src/apps/links/components/lib/comment-item.js b/pkg/interface/src/views/apps/links/components/lib/comment-item.js
similarity index 94%
rename from pkg/interface/src/apps/links/components/lib/comment-item.js
rename to pkg/interface/src/views/apps/links/components/lib/comment-item.js
index 54e6d4495..3ef26e5fd 100644
--- a/pkg/interface/src/apps/links/components/lib/comment-item.js
+++ b/pkg/interface/src/views/apps/links/components/lib/comment-item.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
-import { Sigil } from '../../../../lib/sigil';
-import { cite } from '../../../../lib/util';
+import { Sigil } from '../../../../../logic/lib/sigil';
+import { cite } from '../../../../../logic/lib/util';
import moment from 'moment';
export class CommentItem extends Component {
diff --git a/pkg/interface/src/apps/links/components/lib/comments-pagination.js b/pkg/interface/src/views/apps/links/components/lib/comments-pagination.js
similarity index 94%
rename from pkg/interface/src/apps/links/components/lib/comments-pagination.js
rename to pkg/interface/src/views/apps/links/components/lib/comments-pagination.js
index 31dbdfbcd..552d9d1c6 100644
--- a/pkg/interface/src/apps/links/components/lib/comments-pagination.js
+++ b/pkg/interface/src/views/apps/links/components/lib/comments-pagination.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
-import { makeRoutePath } from '../../../../lib/util';
+import { makeRoutePath } from '../../../../../logic/lib/util';
export class CommentsPagination extends Component {
render() {
diff --git a/pkg/interface/src/apps/links/components/lib/comments.js b/pkg/interface/src/views/apps/links/components/lib/comments.js
similarity index 96%
rename from pkg/interface/src/apps/links/components/lib/comments.js
rename to pkg/interface/src/views/apps/links/components/lib/comments.js
index bce3e456a..a62c2074f 100644
--- a/pkg/interface/src/apps/links/components/lib/comments.js
+++ b/pkg/interface/src/views/apps/links/components/lib/comments.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { CommentItem } from './comment-item';
import { CommentsPagination } from './comments-pagination';
-import { getContactDetails } from '../../../../lib/util';
+import { getContactDetails } from '../../../../../logic/lib/util';
export class Comments extends Component {
constructor(props) {
super(props);
diff --git a/pkg/interface/src/apps/links/components/lib/group-item.js b/pkg/interface/src/views/apps/links/components/lib/group-item.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/lib/group-item.js
rename to pkg/interface/src/views/apps/links/components/lib/group-item.js
diff --git a/pkg/interface/src/apps/links/components/lib/invite-element.js b/pkg/interface/src/views/apps/links/components/lib/invite-element.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/lib/invite-element.js
rename to pkg/interface/src/views/apps/links/components/lib/invite-element.js
diff --git a/pkg/interface/src/apps/links/components/lib/link-detail-preview.js b/pkg/interface/src/views/apps/links/components/lib/link-detail-preview.js
similarity index 98%
rename from pkg/interface/src/apps/links/components/lib/link-detail-preview.js
rename to pkg/interface/src/views/apps/links/components/lib/link-detail-preview.js
index b044a7421..316d39a73 100644
--- a/pkg/interface/src/apps/links/components/lib/link-detail-preview.js
+++ b/pkg/interface/src/views/apps/links/components/lib/link-detail-preview.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react';
-import { cite } from '../../../../lib/util';
+import { cite } from '../../../../../logic/lib/util';
import moment from 'moment';
export class LinkPreview extends Component {
diff --git a/pkg/interface/src/apps/links/components/lib/link-item.js b/pkg/interface/src/views/apps/links/components/lib/link-item.js
similarity index 96%
rename from pkg/interface/src/apps/links/components/lib/link-item.js
rename to pkg/interface/src/views/apps/links/components/lib/link-item.js
index 805e91ed5..a67552714 100644
--- a/pkg/interface/src/apps/links/components/lib/link-item.js
+++ b/pkg/interface/src/views/apps/links/components/lib/link-item.js
@@ -1,9 +1,9 @@
import React, { Component } from 'react';
import moment from 'moment';
-import { Sigil } from '../../../../lib/sigil';
+import { Sigil } from '../../../../../logic/lib/sigil';
import { Link } from 'react-router-dom';
-import { makeRoutePath, cite } from '../../../../lib/util';
+import { makeRoutePath, cite } from '../../../../../logic/lib/util';
export class LinkItem extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/links/components/lib/link-submit.js b/pkg/interface/src/views/apps/links/components/lib/link-submit.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/lib/link-submit.js
rename to pkg/interface/src/views/apps/links/components/lib/link-submit.js
diff --git a/pkg/interface/src/apps/links/components/lib/links-tabbar.js b/pkg/interface/src/views/apps/links/components/lib/links-tabbar.js
similarity index 96%
rename from pkg/interface/src/apps/links/components/lib/links-tabbar.js
rename to pkg/interface/src/views/apps/links/components/lib/links-tabbar.js
index 1a9181ee3..31ed9833c 100644
--- a/pkg/interface/src/apps/links/components/lib/links-tabbar.js
+++ b/pkg/interface/src/views/apps/links/components/lib/links-tabbar.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
-import { makeRoutePath } from '../../../../lib/util';
+import { makeRoutePath } from '../../../../../logic/lib/util';
export class LinksTabBar extends Component {
render() {
diff --git a/pkg/interface/src/apps/links/components/lib/member-element.js b/pkg/interface/src/views/apps/links/components/lib/member-element.js
similarity index 92%
rename from pkg/interface/src/apps/links/components/lib/member-element.js
rename to pkg/interface/src/views/apps/links/components/lib/member-element.js
index c93fdc94c..2bc81f93b 100644
--- a/pkg/interface/src/apps/links/components/lib/member-element.js
+++ b/pkg/interface/src/views/apps/links/components/lib/member-element.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
-import { Sigil } from '../../../../lib/sigil';
-import { uxToHex, cite } from '../../../../lib/util';
+import { Sigil } from '../../../../../logic/lib/sigil';
+import { uxToHex, cite } from '../../../../../logic/lib/util';
export class MemberElement extends Component {
onRemove() {
const { props } = this;
diff --git a/pkg/interface/src/apps/links/components/lib/message-screen.js b/pkg/interface/src/views/apps/links/components/lib/message-screen.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/lib/message-screen.js
rename to pkg/interface/src/views/apps/links/components/lib/message-screen.js
diff --git a/pkg/interface/src/apps/links/components/lib/pagination.js b/pkg/interface/src/views/apps/links/components/lib/pagination.js
similarity index 93%
rename from pkg/interface/src/apps/links/components/lib/pagination.js
rename to pkg/interface/src/views/apps/links/components/lib/pagination.js
index 720267d9e..a8664787e 100644
--- a/pkg/interface/src/apps/links/components/lib/pagination.js
+++ b/pkg/interface/src/views/apps/links/components/lib/pagination.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
-import { makeRoutePath } from '../../../../lib/util';
+import { makeRoutePath } from '../../../../../logic/lib/util';
export class Pagination extends Component {
render() {
diff --git a/pkg/interface/src/apps/links/components/lib/welcome.js b/pkg/interface/src/views/apps/links/components/lib/welcome.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/lib/welcome.js
rename to pkg/interface/src/views/apps/links/components/lib/welcome.js
diff --git a/pkg/interface/src/apps/links/components/link.js b/pkg/interface/src/views/apps/links/components/link.js
similarity index 98%
rename from pkg/interface/src/apps/links/components/link.js
rename to pkg/interface/src/views/apps/links/components/link.js
index a4fdc1e48..6d557cc78 100644
--- a/pkg/interface/src/apps/links/components/link.js
+++ b/pkg/interface/src/views/apps/links/components/link.js
@@ -6,7 +6,7 @@ import { Link } from 'react-router-dom';
import { Comments } from './lib/comments';
import { Spinner } from '../../../components/Spinner';
import { LoadingScreen } from './loading';
-import { makeRoutePath, getContactDetails } from '../../../lib/util';
+import { makeRoutePath, getContactDetails } from '../../../../logic/lib/util';
import CommentItem from './lib/comment-item';
export class LinkDetail extends Component {
diff --git a/pkg/interface/src/apps/links/components/links-list.js b/pkg/interface/src/views/apps/links/components/links-list.js
similarity index 98%
rename from pkg/interface/src/apps/links/components/links-list.js
rename to pkg/interface/src/views/apps/links/components/links-list.js
index 56cb7872a..bdb0ee627 100644
--- a/pkg/interface/src/apps/links/components/links-list.js
+++ b/pkg/interface/src/views/apps/links/components/links-list.js
@@ -9,7 +9,7 @@ import { LinkItem } from './lib/link-item';
import { LinkSubmit } from './lib/link-submit';
import { Pagination } from './lib/pagination';
-import { makeRoutePath, getContactDetails } from '../../../lib/util';
+import { makeRoutePath, getContactDetails } from '../../../../logic/lib/util';
export class Links extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/links/components/loading.js b/pkg/interface/src/views/apps/links/components/loading.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/loading.js
rename to pkg/interface/src/views/apps/links/components/loading.js
diff --git a/pkg/interface/src/apps/links/components/member.js b/pkg/interface/src/views/apps/links/components/member.js
similarity index 97%
rename from pkg/interface/src/apps/links/components/member.js
rename to pkg/interface/src/views/apps/links/components/member.js
index 017a54eee..74966fe71 100644
--- a/pkg/interface/src/apps/links/components/member.js
+++ b/pkg/interface/src/views/apps/links/components/member.js
@@ -6,7 +6,7 @@ import { LoadingScreen } from './loading';
import { LinksTabBar } from './lib/links-tabbar';
import { MemberElement } from './lib/member-element';
import { SidebarSwitcher } from '../../../components/SidebarSwitch';
-import { makeRoutePath } from '../../../lib/util';
+import { makeRoutePath } from '../../../../logic/lib/util';
import { GroupView } from '../../../components/Group';
export class MemberScreen extends Component {
diff --git a/pkg/interface/src/apps/links/components/new.js b/pkg/interface/src/views/apps/links/components/new.js
similarity index 98%
rename from pkg/interface/src/apps/links/components/new.js
rename to pkg/interface/src/views/apps/links/components/new.js
index c04ef03ce..a73f12b77 100644
--- a/pkg/interface/src/apps/links/components/new.js
+++ b/pkg/interface/src/views/apps/links/components/new.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { InviteSearch } from '../../../components/InviteSearch';
import { Spinner } from '../../../components/Spinner';
import { Link } from 'react-router-dom';
-import { makeRoutePath, deSig } from '../../../lib/util';
+import { makeRoutePath, deSig } from '../../../../logic/lib/util';
import urbitOb from 'urbit-ob';
export class NewScreen extends Component {
diff --git a/pkg/interface/src/apps/links/components/settings.js b/pkg/interface/src/views/apps/links/components/settings.js
similarity index 99%
rename from pkg/interface/src/apps/links/components/settings.js
rename to pkg/interface/src/views/apps/links/components/settings.js
index 7b9f38fb6..1e0b7516e 100644
--- a/pkg/interface/src/apps/links/components/settings.js
+++ b/pkg/interface/src/views/apps/links/components/settings.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
-import { uxToHex, makeRoutePath } from '../../../lib/util';
+import { uxToHex, makeRoutePath } from '../../../../logic/lib/util';
import { Link } from 'react-router-dom';
import { LoadingScreen } from './loading';
diff --git a/pkg/interface/src/apps/links/components/skeleton.js b/pkg/interface/src/views/apps/links/components/skeleton.js
similarity index 100%
rename from pkg/interface/src/apps/links/components/skeleton.js
rename to pkg/interface/src/views/apps/links/components/skeleton.js
diff --git a/pkg/interface/src/apps/links/css/custom.css b/pkg/interface/src/views/apps/links/css/custom.css
similarity index 100%
rename from pkg/interface/src/apps/links/css/custom.css
rename to pkg/interface/src/views/apps/links/css/custom.css
diff --git a/pkg/interface/src/apps/publish/app.js b/pkg/interface/src/views/apps/publish/app.js
similarity index 100%
rename from pkg/interface/src/apps/publish/app.js
rename to pkg/interface/src/views/apps/publish/app.js
diff --git a/pkg/interface/src/apps/publish/components/lib/comment-input.js b/pkg/interface/src/views/apps/publish/components/lib/comment-input.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/comment-input.js
rename to pkg/interface/src/views/apps/publish/components/lib/comment-input.js
diff --git a/pkg/interface/src/apps/publish/components/lib/comment-item.js b/pkg/interface/src/views/apps/publish/components/lib/comment-item.js
similarity index 97%
rename from pkg/interface/src/apps/publish/components/lib/comment-item.js
rename to pkg/interface/src/views/apps/publish/components/lib/comment-item.js
index 4c64969fd..befdd5939 100644
--- a/pkg/interface/src/apps/publish/components/lib/comment-item.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/comment-item.js
@@ -1,8 +1,8 @@
import React, { Component } from 'react';
import moment from 'moment';
-import { Sigil } from '../../../../lib/sigil';
+import { Sigil } from '../../../../../logic/lib/sigil';
import CommentInput from './comment-input';
-import { uxToHex, cite } from '../../../../lib/util';
+import { uxToHex, cite } from '../../../../../logic/lib/util';
export class CommentItem extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/publish/components/lib/comments.js b/pkg/interface/src/views/apps/publish/components/lib/comments.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/comments.js
rename to pkg/interface/src/views/apps/publish/components/lib/comments.js
index 32fdca68c..9bce9eb92 100644
--- a/pkg/interface/src/apps/publish/components/lib/comments.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/comments.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import { CommentItem } from './comment-item';
import CommentInput from './comment-input';
-import { dateToDa } from '../../../../lib/util';
+import { dateToDa } from '../../../../../logic/lib/util';
import { Spinner } from '../../../../components/Spinner';
export class Comments extends Component {
diff --git a/pkg/interface/src/apps/publish/components/lib/dropdown.js b/pkg/interface/src/views/apps/publish/components/lib/dropdown.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/dropdown.js
rename to pkg/interface/src/views/apps/publish/components/lib/dropdown.js
diff --git a/pkg/interface/src/apps/publish/components/lib/edit-post.js b/pkg/interface/src/views/apps/publish/components/lib/edit-post.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/edit-post.js
rename to pkg/interface/src/views/apps/publish/components/lib/edit-post.js
index c22021a42..4041ca900 100644
--- a/pkg/interface/src/apps/publish/components/lib/edit-post.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/edit-post.js
@@ -3,7 +3,7 @@ import { SidebarSwitcher } from '../../../../components/SidebarSwitch';
import { Spinner } from '../../../../components/Spinner';
import { Link } from 'react-router-dom';
import { Controlled as CodeMirror } from 'react-codemirror2';
-import { dateToDa } from '../../../../lib/util';
+import { dateToDa } from '../../../../../logic/lib/util';
import 'codemirror/mode/markdown/markdown';
diff --git a/pkg/interface/src/apps/publish/components/lib/group-item.js b/pkg/interface/src/views/apps/publish/components/lib/group-item.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/group-item.js
rename to pkg/interface/src/views/apps/publish/components/lib/group-item.js
diff --git a/pkg/interface/src/apps/publish/components/lib/join.js b/pkg/interface/src/views/apps/publish/components/lib/join.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/join.js
rename to pkg/interface/src/views/apps/publish/components/lib/join.js
diff --git a/pkg/interface/src/apps/publish/components/lib/new-post.js b/pkg/interface/src/views/apps/publish/components/lib/new-post.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/new-post.js
rename to pkg/interface/src/views/apps/publish/components/lib/new-post.js
index 8dd9d1cbe..52a61e79c 100644
--- a/pkg/interface/src/apps/publish/components/lib/new-post.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/new-post.js
@@ -3,7 +3,7 @@ import { SidebarSwitcher } from '../../../../components/SidebarSwitch';
import { Spinner } from '../../../../components/Spinner';
import { Link } from 'react-router-dom';
import { Controlled as CodeMirror } from 'react-codemirror2';
-import { dateToDa, stringToSymbol } from '../../../../lib/util';
+import { dateToDa, stringToSymbol } from '../../../../../logic/lib/util';
import 'codemirror/mode/markdown/markdown';
diff --git a/pkg/interface/src/apps/publish/components/lib/new.js b/pkg/interface/src/views/apps/publish/components/lib/new.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/new.js
rename to pkg/interface/src/views/apps/publish/components/lib/new.js
index dde1492d4..aa3980e16 100644
--- a/pkg/interface/src/apps/publish/components/lib/new.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/new.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { InviteSearch } from '../../../../components/InviteSearch';
import { Spinner } from '../../../../components/Spinner';
import { Link } from 'react-router-dom';
-import { stringToSymbol } from '../../../../lib/util';
+import { stringToSymbol } from '../../../../../logic/lib/util';
export class NewScreen extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/publish/components/lib/note-navigation.js b/pkg/interface/src/views/apps/publish/components/lib/note-navigation.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/note-navigation.js
rename to pkg/interface/src/views/apps/publish/components/lib/note-navigation.js
diff --git a/pkg/interface/src/apps/publish/components/lib/note.js b/pkg/interface/src/views/apps/publish/components/lib/note.js
similarity index 99%
rename from pkg/interface/src/apps/publish/components/lib/note.js
rename to pkg/interface/src/views/apps/publish/components/lib/note.js
index de1e55aa9..7dd52c475 100644
--- a/pkg/interface/src/apps/publish/components/lib/note.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/note.js
@@ -6,7 +6,7 @@ import { Comments } from './comments';
import { NoteNavigation } from './note-navigation';
import moment from 'moment';
import ReactMarkdown from 'react-markdown';
-import { cite } from '../../../../lib/util';
+import { cite } from '../../../../../logic/lib/util';
export class Note extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/publish/components/lib/notebook-item.js b/pkg/interface/src/views/apps/publish/components/lib/notebook-item.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/notebook-item.js
rename to pkg/interface/src/views/apps/publish/components/lib/notebook-item.js
diff --git a/pkg/interface/src/apps/publish/components/lib/notebook-posts.js b/pkg/interface/src/views/apps/publish/components/lib/notebook-posts.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/notebook-posts.js
rename to pkg/interface/src/views/apps/publish/components/lib/notebook-posts.js
index ee8ee3fb5..d068ec358 100644
--- a/pkg/interface/src/apps/publish/components/lib/notebook-posts.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/notebook-posts.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import moment from 'moment';
import { Link } from 'react-router-dom';
import ReactMarkdown from 'react-markdown';
-import { cite } from '../../../../lib/util';
+import { cite } from '../../../../../logic/lib/util';
export class NotebookPosts extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/publish/components/lib/notebook.js b/pkg/interface/src/views/apps/publish/components/lib/notebook.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/notebook.js
rename to pkg/interface/src/views/apps/publish/components/lib/notebook.js
index 56e144c2d..06a004659 100644
--- a/pkg/interface/src/apps/publish/components/lib/notebook.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/notebook.js
@@ -4,8 +4,8 @@ import { SidebarSwitcher } from '../../../../components/SidebarSwitch';
import { NotebookPosts } from './notebook-posts';
import { Subscribers } from './subscribers';
import { Settings } from './settings';
-import { cite } from '../../../../lib/util';
-import { roleForShip } from '../../../../lib/group';
+import { cite } from '../../../../../logic/lib/util';
+import { roleForShip } from '../../../../../logic/lib/group';
export class Notebook extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/publish/components/lib/settings.js b/pkg/interface/src/views/apps/publish/components/lib/settings.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/settings.js
rename to pkg/interface/src/views/apps/publish/components/lib/settings.js
diff --git a/pkg/interface/src/apps/publish/components/lib/sidebar.js b/pkg/interface/src/views/apps/publish/components/lib/sidebar.js
similarity index 98%
rename from pkg/interface/src/apps/publish/components/lib/sidebar.js
rename to pkg/interface/src/views/apps/publish/components/lib/sidebar.js
index 5a9d3809e..c48b39763 100644
--- a/pkg/interface/src/apps/publish/components/lib/sidebar.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/sidebar.js
@@ -3,7 +3,7 @@ import { Link } from 'react-router-dom';
import SidebarInvite from '../../../../components/SidebarInvite';
import { Welcome } from './welcome';
import { GroupItem } from './group-item';
-import { alphabetiseAssociations } from '../../../../lib/util';
+import { alphabetiseAssociations } from '../../../../../logic/lib/util';
export class Sidebar extends Component {
render() {
diff --git a/pkg/interface/src/apps/publish/components/lib/subscribers.js b/pkg/interface/src/views/apps/publish/components/lib/subscribers.js
similarity index 96%
rename from pkg/interface/src/apps/publish/components/lib/subscribers.js
rename to pkg/interface/src/views/apps/publish/components/lib/subscribers.js
index cdbf357a3..ede8b81a9 100644
--- a/pkg/interface/src/apps/publish/components/lib/subscribers.js
+++ b/pkg/interface/src/views/apps/publish/components/lib/subscribers.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { GroupView } from '../../../../components/Group';
-import { resourceFromPath } from '../../../../lib/group';
+import { resourceFromPath } from '../../../../../logic/lib/group';
export class Subscribers extends Component {
constructor(props) {
diff --git a/pkg/interface/src/apps/publish/components/lib/welcome.js b/pkg/interface/src/views/apps/publish/components/lib/welcome.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/lib/welcome.js
rename to pkg/interface/src/views/apps/publish/components/lib/welcome.js
diff --git a/pkg/interface/src/apps/publish/components/skeleton.js b/pkg/interface/src/views/apps/publish/components/skeleton.js
similarity index 100%
rename from pkg/interface/src/apps/publish/components/skeleton.js
rename to pkg/interface/src/views/apps/publish/components/skeleton.js
diff --git a/pkg/interface/src/apps/publish/css/custom.css b/pkg/interface/src/views/apps/publish/css/custom.css
similarity index 100%
rename from pkg/interface/src/apps/publish/css/custom.css
rename to pkg/interface/src/views/apps/publish/css/custom.css
diff --git a/pkg/interface/src/components/Content.js b/pkg/interface/src/views/components/Content.js
similarity index 100%
rename from pkg/interface/src/components/Content.js
rename to pkg/interface/src/views/components/Content.js
diff --git a/pkg/interface/src/components/Error.tsx b/pkg/interface/src/views/components/Error.tsx
similarity index 100%
rename from pkg/interface/src/components/Error.tsx
rename to pkg/interface/src/views/components/Error.tsx
diff --git a/pkg/interface/src/components/ErrorBoundary.tsx b/pkg/interface/src/views/components/ErrorBoundary.tsx
similarity index 100%
rename from pkg/interface/src/components/ErrorBoundary.tsx
rename to pkg/interface/src/views/components/ErrorBoundary.tsx
diff --git a/pkg/interface/src/components/Group.tsx b/pkg/interface/src/views/components/Group.tsx
similarity index 96%
rename from pkg/interface/src/components/Group.tsx
rename to pkg/interface/src/views/components/Group.tsx
index 5ac6459a2..76d41651e 100644
--- a/pkg/interface/src/components/Group.tsx
+++ b/pkg/interface/src/views/components/Group.tsx
@@ -3,22 +3,22 @@ import _, { capitalize } from 'lodash';
import { FixedSizeList as List } from 'react-window';
import { Dropdown } from '../apps/publish/components/lib/dropdown';
-import { cite, deSig } from '../lib/util';
-import { roleForShip, resourceFromPath } from '../lib/group';
+import { cite, deSig } from '../../logic/lib/util';
+import { roleForShip, resourceFromPath } from '../../logic/lib/group';
import {
Group,
InvitePolicy,
OpenPolicy,
roleTags,
Groups,
-} from '../types/group-update';
-import { Path, PatpNoSig, Patp } from '../types/noun';
+} from '../../types/group-update';
+import { Path, PatpNoSig, Patp } from '../../types/noun';
import GlobalApi from '../api/global';
import { Menu, MenuButton, MenuList, MenuItem } from '@tlon/indigo-react';
import InviteSearch, { Invites } from './InviteSearch';
import { Spinner } from './Spinner';
-import { Rolodex } from '../types/contact-update';
-import { Associations } from '../types/metadata-update';
+import { Rolodex } from '../../types/contact-update';
+import { Associations } from '../../types/metadata-update';
class GroupMember extends Component<{ ship: Patp; options: any[] }, {}> {
render() {
diff --git a/pkg/interface/src/components/InviteSearch.tsx b/pkg/interface/src/views/components/InviteSearch.tsx
similarity index 98%
rename from pkg/interface/src/components/InviteSearch.tsx
rename to pkg/interface/src/views/components/InviteSearch.tsx
index 7901263c7..9502693f2 100644
--- a/pkg/interface/src/components/InviteSearch.tsx
+++ b/pkg/interface/src/views/components/InviteSearch.tsx
@@ -2,11 +2,11 @@ import React, { Component, createRef } from 'react';
import _ from 'lodash';
import Mousetrap from 'mousetrap';
import urbitOb from 'urbit-ob';
-import { Sigil } from '../lib/sigil';
-import { PatpNoSig, Path } from '../types/noun';
-import { Groups} from '../types/group-update';
-import { Rolodex, Contact } from '../types/contact-update';
-import { Associations } from '../types/metadata-update';
+import { Sigil } from '../../logic/lib/sigil';
+import { PatpNoSig, Path } from '../../types/noun';
+import { Groups} from '../../types/group-update';
+import { Rolodex, Contact } from '../../types/contact-update';
+import { Associations } from '../../types/metadata-update';
export interface Invites {
ships: PatpNoSig[];
diff --git a/pkg/interface/src/components/Omnibox.js b/pkg/interface/src/views/components/Omnibox.js
similarity index 98%
rename from pkg/interface/src/components/Omnibox.js
rename to pkg/interface/src/views/components/Omnibox.js
index b61de7b0c..ced7e11a9 100644
--- a/pkg/interface/src/components/Omnibox.js
+++ b/pkg/interface/src/views/components/Omnibox.js
@@ -1,12 +1,12 @@
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
import { Box, Row, Rule, Text } from '@tlon/indigo-react';
-import index from '../lib/omnibox';
+import index from '../../logic/lib/omnibox';
import Mousetrap from 'mousetrap';
import OmniboxInput from './OmniboxInput';
import OmniboxResult from './OmniboxResult';
-import { cite } from '../lib/util';
+import { cite } from '../../logic/lib/util';
export class Omnibox extends Component {
constructor(props) {
diff --git a/pkg/interface/src/components/OmniboxInput.js b/pkg/interface/src/views/components/OmniboxInput.js
similarity index 100%
rename from pkg/interface/src/components/OmniboxInput.js
rename to pkg/interface/src/views/components/OmniboxInput.js
diff --git a/pkg/interface/src/components/OmniboxResult.js b/pkg/interface/src/views/components/OmniboxResult.js
similarity index 98%
rename from pkg/interface/src/components/OmniboxResult.js
rename to pkg/interface/src/views/components/OmniboxResult.js
index 66798b59d..83e3cc3f8 100644
--- a/pkg/interface/src/components/OmniboxResult.js
+++ b/pkg/interface/src/views/components/OmniboxResult.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Row, Icon, Text } from '@tlon/indigo-react';
-import defaultApps from '../lib/default-apps';
+import defaultApps from '../../logic/lib/default-apps';
export class OmniboxResult extends Component {
constructor(props) {
diff --git a/pkg/interface/src/components/ReconnectButton.js b/pkg/interface/src/views/components/ReconnectButton.js
similarity index 100%
rename from pkg/interface/src/components/ReconnectButton.js
rename to pkg/interface/src/views/components/ReconnectButton.js
diff --git a/pkg/interface/src/components/SidebarInvite.tsx b/pkg/interface/src/views/components/SidebarInvite.tsx
similarity index 100%
rename from pkg/interface/src/components/SidebarInvite.tsx
rename to pkg/interface/src/views/components/SidebarInvite.tsx
diff --git a/pkg/interface/src/components/SidebarSwitch.js b/pkg/interface/src/views/components/SidebarSwitch.js
similarity index 100%
rename from pkg/interface/src/components/SidebarSwitch.js
rename to pkg/interface/src/views/components/SidebarSwitch.js
diff --git a/pkg/interface/src/components/Spinner.js b/pkg/interface/src/views/components/Spinner.js
similarity index 100%
rename from pkg/interface/src/components/Spinner.js
rename to pkg/interface/src/views/components/Spinner.js
diff --git a/pkg/interface/src/components/StatusBar.js b/pkg/interface/src/views/components/StatusBar.js
similarity index 100%
rename from pkg/interface/src/components/StatusBar.js
rename to pkg/interface/src/views/components/StatusBar.js
diff --git a/pkg/interface/src/components/TwoPaneApp.js b/pkg/interface/src/views/components/TwoPaneApp.js
similarity index 100%
rename from pkg/interface/src/components/TwoPaneApp.js
rename to pkg/interface/src/views/components/TwoPaneApp.js
diff --git a/pkg/interface/src/components/toggle.js b/pkg/interface/src/views/components/toggle.js
similarity index 100%
rename from pkg/interface/src/components/toggle.js
rename to pkg/interface/src/views/components/toggle.js
diff --git a/pkg/interface/src/css/fonts.css b/pkg/interface/src/views/css/fonts.css
similarity index 100%
rename from pkg/interface/src/css/fonts.css
rename to pkg/interface/src/views/css/fonts.css
diff --git a/pkg/interface/src/css/indigo-static.css b/pkg/interface/src/views/css/indigo-static.css
similarity index 100%
rename from pkg/interface/src/css/indigo-static.css
rename to pkg/interface/src/views/css/indigo-static.css
diff --git a/pkg/interface/src/themes/light.ts b/pkg/interface/src/views/themes/light.ts
similarity index 100%
rename from pkg/interface/src/themes/light.ts
rename to pkg/interface/src/views/themes/light.ts
diff --git a/pkg/interface/src/themes/old-dark.ts b/pkg/interface/src/views/themes/old-dark.ts
similarity index 100%
rename from pkg/interface/src/themes/old-dark.ts
rename to pkg/interface/src/views/themes/old-dark.ts