diff --git a/web/dist/css/app.5c5d8f9b.css b/web/dist/css/app.b51b581f.css
similarity index 83%
rename from web/dist/css/app.5c5d8f9b.css
rename to web/dist/css/app.b51b581f.css
index 69b13b0..fc08c13 100644
--- a/web/dist/css/app.5c5d8f9b.css
+++ b/web/dist/css/app.b51b581f.css
@@ -1 +1 @@
-#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}.fas[data-v-c1288b72]{margin-right:8px}.profile[data-v-9c330358]{width:300px}.profile-grid[data-v-9c330358]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-line-pack:justify;align-content:space-between}.profile-image{width:75px}.icon[data-v-26eca70a]{width:32px;height:32px}.invisible{display:none}.ellipsis:after{content:"\2026"}.w3-container.w3-content[data-v-120217d8]{max-width:800px}.profile-main[data-v-120217d8]{height:256px;width:256px}
\ No newline at end of file
+#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50}.fas[data-v-c1288b72]{margin-right:8px}.profile[data-v-9c330358]{width:300px}.profile-grid[data-v-9c330358]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-line-pack:justify;align-content:space-between}.profile-image{width:75px}.icon[data-v-26eca70a]{width:32px;height:32px}.invisible{display:none}.ellipsis:after{content:"\2026"}.w3-container.w3-content[data-v-2eec363b]{max-width:800px}.profile-main[data-v-2eec363b]{height:256px;width:256px}
\ No newline at end of file
diff --git a/web/dist/index.html b/web/dist/index.html
index 70ea847..84f7615 100644
--- a/web/dist/index.html
+++ b/web/dist/index.html
@@ -1 +1 @@
-
web
\ No newline at end of file
+web
\ No newline at end of file
diff --git a/web/dist/js/app-legacy.9f4201df.js b/web/dist/js/app-legacy.9f4201df.js
deleted file mode 100644
index c362778..0000000
--- a/web/dist/js/app-legacy.9f4201df.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(t){function e(e){for(var o,i,c=e[0],s=e[1],u=e[2],p=0,d=[];p\r\n
\r\n \r\n
{{ actor.preferredUsername }}
\r\n
\r\n {{ followerCount}}\r\n {{ postCount}}\r\n
\r\n
{{ actor.summary }}
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileSummary.vue?vue&type=template&id=c1288b72&scoped=true&\"\nimport script from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c1288b72\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n
\r\n \r\n
\r\n
Guppe Groups
\r\n
\r\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\r\n people based on shared\r\n interests without the maniuplation of your attention to maximize ad revenue nor the\r\n walled garden lock-in of capitalist social media.\r\n
\r\n
How does Guppe work?
\r\n
\r\n Guppe groups look like regular users you can interact with using your existing account on any\r\n ActivityPub service, but they automatically share anything you send them with all of their followers.\r\n
\r\n \r\n
Follow a group on @gup.pe to join that group
\r\n
Mention a group on @gup.pe to share a post with everyone in the group
\r\n
New groups are created on demand, just search for or mention @YourGroupNameHere@gup.pe and it will show up
\r\n
Visit a @gup.pe group profile to see the group history
\r\n \r\n
Active Groups
\r\n
\r\n
\r\n \r\n Group profile...\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=9c330358&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9c330358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-container w3-content w3-center w3-padding-32\"},[_c('profile-summary',{attrs:{\"actor\":_vm.actor}}),_c('p',{staticClass:\"w3-left-align\"},[_vm._v(\"To join \"+_vm._s(_vm.actor.preferredUsername)+\", enter your handle below and you'll be\\n redirected back to this group's profile in your app where you can follow it.\")]),_c('form',{staticClass:\"w3-container\"},[_c('label',[_vm._v(\"Your account\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.handle),expression:\"handle\"}],staticClass:\"w3-input w3-center\",attrs:{\"placeholder\":\"user@example.com\",\"type\":\"text\"},domProps:{\"value\":(_vm.handle)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.handle=$event.target.value}}}),_c('button',{staticClass:\"w3-btn w3-cyan w3-block w3-margin-top\",attrs:{\"disabled\":_vm.fetchingRemote},on:{\"click\":function($event){$event.preventDefault();return _vm.doFollow($event)}}},[_vm._v(\"\\n Procced to follow\\n \")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.invalidHandle),expression:\"invalidHandle\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.invalidHandle = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Double check that username\")]),_c('p',[_vm._v(\"e.g. you@yourhost.com\")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.unreachable),expression:\"unreachable\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.unreachable = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Oops\")]),_c('p',[_vm._v(\"Couldn't connect with your host.\")]),_c('p',[_vm._v(\"You could try going back to your app and entering \"+_vm._s(_vm.groupHandle)+\" in the search instead\")])]),_c('div',{staticClass:\"w3-container w3-content w3-padding-64\"},[_c('h2',{staticClass:\"w3-wide w3-center\"},[_vm._v(\"Recent group posts\")]),_c('div',_vm._l((_vm.stream),function(post){return _c('post-card',{key:post.id,attrs:{\"activity\":post}})}),1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-card w3-margin-bottom\"},[_c('div',{staticClass:\"w3-container w3-left-align\"},[_c('label',[_c('b',[_vm._v(_vm._s(_vm.actor.preferredUsername))]),_c('span',{staticClass:\"w3-text-grey\"},[_vm._v(\"@\"+_vm._s(_vm.actorHost))])])]),_c('div',{staticClass:\"w3-container\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.post.content)}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PostCard.vue?vue&type=template&id=26eca70a&scoped=true&\"\nimport script from \"./PostCard.vue?vue&type=script&lang=js&\"\nexport * from \"./PostCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"\nimport style1 from \"./PostCard.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26eca70a\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n \r\n
To join {{ actor.preferredUsername }}, enter your handle below and you'll be\r\n redirected back to this group's profile in your app where you can follow it.
\r\n \r\n
\r\n ×\r\n
Double check that username
\r\n
e.g. you@yourhost.com
\r\n
\r\n
\r\n ×\r\n
Oops
\r\n
Couldn't connect with your host.
\r\n
You could try going back to your app and entering {{ groupHandle }} in the search instead
\r\n
\r\n
\r\n
Recent group posts
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=120217d8&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=js&\"\nexport * from \"./Profile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Profile.vue?vue&type=style&index=0&id=120217d8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"120217d8\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Router from 'vue-router'\nimport Home from './views/Home.vue'\nimport Profile from './views/Profile.vue'\n\nVue.use(Router)\n\nexport default new Router({\n mode: 'history',\n routes: [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/u/:name',\n name: 'profile',\n component: Profile,\n props: true\n }\n ],\n scrollBehavior (to, from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n})\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\n\r\nVue.config.productionTip = false\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=120217d8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=120217d8&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/web/dist/js/app-legacy.a96d9fef.js b/web/dist/js/app-legacy.a96d9fef.js
new file mode 100644
index 0000000..31eefbd
--- /dev/null
+++ b/web/dist/js/app-legacy.a96d9fef.js
@@ -0,0 +1,2 @@
+(function(t){function e(e){for(var o,i,c=e[0],s=e[1],u=e[2],p=0,f=[];p\r\n
\r\n \r\n
{{ actor.preferredUsername }}
\r\n
\r\n {{ followerCount}}\r\n {{ postCount}}\r\n
\r\n
{{ actor.summary }}
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileSummary.vue?vue&type=template&id=c1288b72&scoped=true&\"\nimport script from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c1288b72\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n
\r\n \r\n
\r\n
Guppe Groups
\r\n
\r\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\r\n people based on shared\r\n interests without the maniuplation of your attention to maximize ad revenue nor the\r\n walled garden lock-in of capitalist social media.\r\n
\r\n
How does Guppe work?
\r\n
\r\n Guppe groups look like regular users you can interact with using your existing account on any\r\n ActivityPub service, but they automatically share anything you send them with all of their followers.\r\n
\r\n \r\n
Follow a group on @gup.pe to join that group
\r\n
Mention a group on @gup.pe to share a post with everyone in the group
\r\n
New groups are created on demand, just search for or mention @YourGroupNameHere@gup.pe and it will show up
\r\n
Visit a @gup.pe group profile to see the group history
\r\n \r\n
Active Groups
\r\n
\r\n
\r\n \r\n Group profile...\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=9c330358&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9c330358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-container w3-content w3-center w3-padding-32\"},[_c('profile-summary',{attrs:{\"actor\":_vm.actor}}),_c('p',{staticClass:\"w3-left-align\"},[_vm._v(\"To join \"+_vm._s(_vm.actor.preferredUsername)+\", enter your handle below and you'll be\\n redirected back to this group's profile in your app where you can follow it.\")]),_c('form',{staticClass:\"w3-container\"},[_c('label',[_vm._v(\"Your account\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.handle),expression:\"handle\"}],staticClass:\"w3-input w3-center\",attrs:{\"placeholder\":\"user@example.com\",\"type\":\"text\"},domProps:{\"value\":(_vm.handle)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.handle=$event.target.value}}}),_c('button',{staticClass:\"w3-btn w3-cyan w3-block w3-margin-top\",attrs:{\"disabled\":_vm.fetchingRemote},on:{\"click\":function($event){$event.preventDefault();return _vm.doFollow($event)}}},[_vm._v(\"\\n Procced to follow\\n \")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.invalidHandle),expression:\"invalidHandle\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.invalidHandle = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Double check that username\")]),_c('p',[_vm._v(\"e.g. you@yourhost.com\")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.unreachable),expression:\"unreachable\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.unreachable = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Oops\")]),_c('p',[_vm._v(\"Couldn't connect with your host.\")]),_c('p',[_vm._v(\"You could try going back to your app and entering @\"+_vm._s(_vm.groupHandle)+\" in the search instead\")])]),_c('div',{staticClass:\"w3-container w3-content w3-padding-64\"},[_c('h2',{staticClass:\"w3-wide w3-center\"},[_vm._v(\"Recent group posts\")]),_c('div',_vm._l((_vm.stream),function(post){return _c('post-card',{key:post.id,attrs:{\"activity\":post}})}),1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-card w3-margin-bottom\"},[_c('div',{staticClass:\"w3-container w3-left-align\"},[_c('label',[_c('b',[_vm._v(_vm._s(_vm.actor.preferredUsername))]),_c('span',{staticClass:\"w3-text-grey\"},[_vm._v(\"@\"+_vm._s(_vm.actorHost))])])]),_c('div',{staticClass:\"w3-container\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.post.content)}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PostCard.vue?vue&type=template&id=26eca70a&scoped=true&\"\nimport script from \"./PostCard.vue?vue&type=script&lang=js&\"\nexport * from \"./PostCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"\nimport style1 from \"./PostCard.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26eca70a\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n \r\n
To join {{ actor.preferredUsername }}, enter your handle below and you'll be\r\n redirected back to this group's profile in your app where you can follow it.
\r\n \r\n
\r\n ×\r\n
Double check that username
\r\n
e.g. you@yourhost.com
\r\n
\r\n
\r\n ×\r\n
Oops
\r\n
Couldn't connect with your host.
\r\n
You could try going back to your app and entering @{{ groupHandle }} in the search instead
\r\n
\r\n
\r\n
Recent group posts
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=2eec363b&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=js&\"\nexport * from \"./Profile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Profile.vue?vue&type=style&index=0&id=2eec363b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2eec363b\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Router from 'vue-router'\nimport Home from './views/Home.vue'\nimport Profile from './views/Profile.vue'\n\nVue.use(Router)\n\nexport default new Router({\n mode: 'history',\n routes: [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/u/:name',\n name: 'profile',\n component: Profile,\n props: true\n }\n ],\n scrollBehavior (to, from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n})\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\n\r\nVue.config.productionTip = false\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/web/dist/js/app.0d4cd2d8.js b/web/dist/js/app.0d4cd2d8.js
deleted file mode 100644
index 00d1c7a..0000000
--- a/web/dist/js/app.0d4cd2d8.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(t){function e(e){for(var o,s,i=e[0],c=e[1],l=e[2],p=0,d=[];pt.json()).then(t=>{this.followerCount=t.totalItems}),window.fetch(this.actor.outbox,{method:"get",headers:{accept:"application/activity+json"}}).then(t=>t.json()).then(t=>{this.postCount=t.totalItems})}},created(){this.fetchInfo()},updated(){this.fetchInfo()}},m=w,v=(r("13f2"),Object(s["a"])(m,h,f,!1,null,"c1288b72",null)),g=v.exports,b={name:"home",components:{ProfileSummary:g},data(){return{groups:[],error:null}},created(){window.fetch("/u/",{method:"get",headers:{accept:"application/json"}}).then(t=>t.json()).then(t=>{this.groups=t}).catch(t=>this.error=t.message)}},y=b,_=(r("4bbd"),r("2154"),Object(s["a"])(y,p,d,!1,null,"9c330358",null)),C=_.exports,j=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"w3-container w3-content w3-center w3-padding-32"},[r("profile-summary",{attrs:{actor:t.actor}}),r("p",{staticClass:"w3-left-align"},[t._v("To join "+t._s(t.actor.preferredUsername)+", enter your handle below and you'll be\n redirected back to this group's profile in your app where you can follow it.")]),r("form",{staticClass:"w3-container"},[r("label",[t._v("Your account")]),r("input",{directives:[{name:"model",rawName:"v-model",value:t.handle,expression:"handle"}],staticClass:"w3-input w3-center",attrs:{placeholder:"user@example.com",type:"text"},domProps:{value:t.handle},on:{input:function(e){e.target.composing||(t.handle=e.target.value)}}}),r("button",{staticClass:"w3-btn w3-cyan w3-block w3-margin-top",attrs:{disabled:t.fetchingRemote},on:{click:function(e){return e.preventDefault(),t.doFollow(e)}}},[t._v("\n Procced to follow\n ")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:t.invalidHandle,expression:"invalidHandle"}],staticClass:"w3-panel w3-pale-red w3-display-container w3-border"},[r("span",{staticClass:"w3-button w3-large w3-display-topright",on:{click:function(e){e.preventDefault(),t.invalidHandle=!1}}},[t._v("×")]),r("h3",[t._v("Double check that username")]),r("p",[t._v("e.g. you@yourhost.com")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:t.unreachable,expression:"unreachable"}],staticClass:"w3-panel w3-pale-red w3-display-container w3-border"},[r("span",{staticClass:"w3-button w3-large w3-display-topright",on:{click:function(e){e.preventDefault(),t.unreachable=!1}}},[t._v("×")]),r("h3",[t._v("Oops")]),r("p",[t._v("Couldn't connect with your host.")]),r("p",[t._v("You could try going back to your app and entering "+t._s(t.groupHandle)+" in the search instead")])]),r("div",{staticClass:"w3-container w3-content w3-padding-64"},[r("h2",{staticClass:"w3-wide w3-center"},[t._v("Recent group posts")]),r("div",t._l(t.stream,(function(t){return r("post-card",{key:t.id,attrs:{activity:t}})})),1)])],1)},k=[],x=(r("a481"),r("3835")),O=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"w3-card w3-margin-bottom"},[r("div",{staticClass:"w3-container w3-left-align"},[r("label",[r("b",[t._v(t._s(t.actor.preferredUsername))]),r("span",{staticClass:"w3-text-grey"},[t._v("@"+t._s(t.actorHost))])])]),r("div",{staticClass:"w3-container"},[r("p",{domProps:{innerHTML:t._s(t.post.content)}})])])},P=[],$={props:{activity:{type:Object,required:!0}},data(){return{post:{},actor:{},isError:!1}},computed:{actorIconUrl(){return this.actor.icon&&this.actor.icon.url},actorHost(){try{const t=new URL(this.actor.id);return t.host}catch(t){return""}}},methods:{resolveObject(t){return"string"!==typeof t?new Promise(e=>e(t)):window.fetch(`/o/${encodeURIComponent(t)}`,{method:"get",headers:{accept:"application/activity+json"}}).then(t=>t.json()).catch(t=>{this.isError=!0,console.log(t.message)})}},created(){this.resolveObject(this.activity.object).then(t=>{return this.post=t,this.resolveObject(this.post.attributedTo)}).then(t=>{this.actor=t})}},H=$,G=(r("4a48"),r("582d"),Object(s["a"])(H,O,P,!1,null,"26eca70a",null)),S=G.exports,E={components:{PostCard:S,ProfileSummary:g},props:{name:{type:String,required:!0},postLimit:{type:Number,default:20}},data(){return{actor:{},stream:{},error:null,handle:"",invalidHandle:!1,unreachable:!1,fetchingRemote:!1}},computed:{groupProfileSrc(){return this.actor&&this.actor.icon?this.actor.icon.url:""},groupHandle(){if(this.actor.id&&this.actor.preferredUsername){const t=new window.URL(this.actor.id);return`@${this.actor.preferredUsername.toLowerCase()}@${t.host}`}return""}},methods:{doFollow(){let t,e,r;this.invalidHandle=!1,this.unreachable=!1;try{var o=/@?([^@]+)@(.+)/.exec(this.handle),n=Object(x["a"])(o,3);t=n[0],e=n[1],r=n[2]}catch(a){return void(this.invalidHandle=!0)}this.fetchingRemote=!0,window.fetch(`https://${r}/.well-known/webfinger?resource=acct:${t}`,{method:"get",mode:"cors",headers:{accept:"application/json"}}).then(t=>t.json()).then(t=>{const e=t.links.find(t=>"http://ostatus.org/schema/1.0/subscribe"===t.rel);window.location.href=e.template.replace("{uri}","{{ groupAcct }}")}).catch(t=>{console.log(t),this.unreachable=!0}).then(()=>{this.fetchingRemote=!1})}},created(){window.fetch(`/u/${this.name}`,{method:"get",headers:{accept:"application/activity+json"}}).then(t=>t.json()).then(t=>{this.actor=t}).then(()=>{return window.fetch(this.actor.outbox,{method:"get",mode:"cors",headers:{accept:"application/activity+json"}})}).then(t=>t.json()).then(t=>{this.stream=t.orderedItems.filter(t=>"Announce"===t.type).slice(0,this.postLimit)}).catch(t=>this.error=t.message)}},U=E,I=(r("c2d3"),Object(s["a"])(U,j,k,!1,null,"120217d8",null)),R=I.exports;o["a"].use(u["a"]);var L=new u["a"]({mode:"history",routes:[{path:"/",name:"home",component:C},{path:"/u/:name",name:"profile",component:R,props:!0}],scrollBehavior(t,e,r){return r||{x:0,y:0}}});o["a"].config.productionTip=!1,new o["a"]({router:L,render:t=>t(l)}).$mount("#app")},"582d":function(t,e,r){"use strict";var o=r("c8b5"),n=r.n(o);n.a},"64a9":function(t,e,r){},9838:function(t,e,r){},c2d3:function(t,e,r){"use strict";var o=r("1506"),n=r.n(o);n.a},c8b5:function(t,e,r){},cbf7:function(t,e,r){}});
-//# sourceMappingURL=app.0d4cd2d8.js.map
\ No newline at end of file
diff --git a/web/dist/js/app.0d4cd2d8.js.map b/web/dist/js/app.0d4cd2d8.js.map
deleted file mode 100644
index 42846e7..0000000
--- a/web/dist/js/app.0d4cd2d8.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?5b85","webpack:///./src/components/ProfileSummary.vue?63ae","webpack:///./src/views/Home.vue?71a3","webpack:///./src/components/PostCard.vue?361f","webpack:///./src/views/Home.vue?d740","webpack:///./src/App.vue?513f","webpack:///./src/App.vue","webpack:///./src/views/Home.vue?2d46","webpack:///./src/components/ProfileSummary.vue?fedb","webpack:///src/components/ProfileSummary.vue","webpack:///./src/components/ProfileSummary.vue?8b29","webpack:///./src/components/ProfileSummary.vue","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?2b8c","webpack:///./src/views/Home.vue","webpack:///./src/views/Profile.vue?6dfc","webpack:///./src/components/PostCard.vue?9cd5","webpack:///src/components/PostCard.vue","webpack:///./src/components/PostCard.vue?9bcd","webpack:///./src/components/PostCard.vue","webpack:///src/views/Profile.vue","webpack:///./src/views/Profile.vue?7078","webpack:///./src/views/Profile.vue","webpack:///./src/router.js","webpack:///./src/main.js","webpack:///./src/components/PostCard.vue?afbb","webpack:///./src/views/Profile.vue?2fa0"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","_m","staticRenderFns","script","component","_l","group","_id","groupProfileSrc","_s","actor","preferredUsername","followerCount","postCount","summary","props","type","required","undefined","computed","icon","url","methods","fetch","followers","outbox","fetchInfo","components","ProfileSummary","groups","error","method","headers","accept","directives","rawName","expression","domProps","on","$event","target","composing","handle","fetchingRemote","preventDefault","doFollow","invalidHandle","unreachable","groupHandle","post","id","actorHost","content","activity","isError","URL","host","idOrObject","Promise","encodeURIComponent","resolveObject","PostCard","String","postLimit","Number","default","stream","toLowerCase","acct","username","domain","Vue","use","Router","routes","path","Home","Profile","scrollBehavior","to","from","savedPosition","x","y","config","productionTip","router","h","App","$mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,QAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6ECvJT,yBAAqb,EAAG,G,oCCAxb,yBAA0e,EAAG,G,kFCA7e,yBAAwc,EAAG,G,2DCA3c,yBAAoe,EAAG,G,oCCAve,yBAAge,EAAG,G,2DCA/dyC,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,QAAQ,CAACF,EAAG,MAAM,CAACG,YAAY,2BAA2B,CAACH,EAAG,MAAM,CAACG,YAAY,2BAA2B,CAACH,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,MAAM,CAACF,EAAG,IAAI,CAACG,YAAY,cAAcD,MAAM,CAAC,MAAQ,aAAa,KAAKF,EAAG,MAAM,CAACG,YAAY,UAAU,CAACH,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACP,EAAIQ,GAAG,OAAOJ,EAAG,MAAM,CAACG,YAAY,gCAAgC,CAACH,EAAG,gBAAgB,GAAGA,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACP,EAAIQ,GAAG,SAASR,EAAIS,GAAG,MAC9iBC,EAAkB,CAAC,WAAa,IAAIV,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACG,YAAY,2EAA2E,CAACH,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,uCAAuC,CAACF,EAAG,IAAI,CAACG,YAAY,yC,wBCA7RI,EAAS,GAMTC,EAAY,eACdD,EACAZ,EACAW,GACA,EACA,KACA,KACA,MAIa,EAAAE,E,oBClBX,EAAS,WAAa,IAAIZ,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACG,YAAY,gBAAgB,CAACP,EAAIS,GAAG,GAAGL,EAAG,KAAK,CAACG,YAAY,aAAa,CAACP,EAAIQ,GAAG,kBAAkBJ,EAAG,IAAI,CAACJ,EAAIQ,GAAG,gRAAgRJ,EAAG,KAAK,CAACG,YAAY,aAAa,CAACP,EAAIQ,GAAG,0BAA0BJ,EAAG,IAAI,CAACJ,EAAIQ,GAAG,wNAAwNR,EAAIS,GAAG,GAAGL,EAAG,KAAK,CAACG,YAAY,aAAa,CAACP,EAAIQ,GAAG,mBAAmBJ,EAAG,MAAM,CAACG,YAAY,2CAA2CP,EAAIa,GAAIb,EAAU,QAAE,SAASc,GAAO,OAAOV,EAAG,MAAM,CAACf,IAAIyB,EAAMC,IAAIR,YAAY,mCAAmC,CAACH,EAAG,kBAAkB,CAACG,YAAY,UAAUD,MAAM,CAAC,MAAQQ,KAASV,EAAG,cAAc,CAACE,MAAM,CAAC,GAAM,MAASQ,EAAuB,oBAAK,CAACd,EAAIQ,GAAG,uBAAuB,MAAK,MAC1rC,EAAkB,CAAC,WAAa,IAAIR,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACG,YAAY,aAAa,CAACH,EAAG,MAAM,CAACE,MAAM,CAAC,IAAM,aAAa,IAAM,qBAAqB,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIQ,GAAG,kDAAkDJ,EAAG,KAAK,CAACJ,EAAIQ,GAAG,2EAA2EJ,EAAG,KAAK,CAACJ,EAAIQ,GAAG,gHAAgHJ,EAAG,KAAK,CAACJ,EAAIQ,GAAG,gECDllB,EAAS,WAAa,IAAIR,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACG,YAAY,aAAa,CAACH,EAAG,MAAM,CAACG,YAAY,yBAAyBD,MAAM,CAAC,IAAMN,EAAIgB,mBAAmBZ,EAAG,KAAK,CAACG,YAAY,WAAW,CAACP,EAAIQ,GAAGR,EAAIiB,GAAGjB,EAAIkB,MAAMC,sBAAsBf,EAAG,MAAM,CAACG,YAAY,gBAAgB,CAACH,EAAG,OAAO,CAACG,YAAY,qCAAqC,CAACH,EAAG,IAAI,CAACG,YAAY,eAAeD,MAAM,CAAC,MAAQ,mBAAmBN,EAAIQ,GAAGR,EAAIiB,GAAGjB,EAAIoB,kBAAkBhB,EAAG,OAAO,CAACG,YAAY,qCAAqC,CAACH,EAAG,IAAI,CAACG,YAAY,mBAAmBD,MAAM,CAAC,MAAQ,iBAAiBN,EAAIQ,GAAGR,EAAIiB,GAAGjB,EAAIqB,gBAAgBjB,EAAG,IAAI,CAACG,YAAY,cAAc,CAACH,EAAG,IAAI,CAACJ,EAAIQ,GAAGR,EAAIiB,GAAGjB,EAAIkB,MAAMI,iBACxtB,EAAkB,GCYtB,GACEC,MAAO,CACLL,MAAO,CACLM,KAAM7E,OACN8E,UAAU,IAGd,OACE,MAAO,CACLL,mBAAeM,EACfL,eAAWK,IAGfC,SAAU,CACR,kBACE,OAAO1B,KAAKiB,OAASjB,KAAKiB,MAAMU,KAAO3B,KAAKiB,MAAMU,KAAKC,IAAM,KAGjEC,QAAS,CACP,YACElC,OAAOmC,MAAM9B,KAAKiB,MAAMc,UAAW,CACjC,OAAR,MACQ,QAAR,CACU,OAAV,+BAGA,kBACA,SACQ,KAAR,6BAEMpC,OAAOmC,MAAM9B,KAAKiB,MAAMe,OAAQ,CAC9B,OAAR,MACQ,QAAR,CACU,OAAV,+BAGA,kBACA,SACQ,KAAR,2BAKE,UACEhC,KAAKiC,aAEP,UACEjC,KAAKiC,cC5D+U,ICQpV,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCkBf,GACE5D,KAAM,OACN6D,WAAY,CACVC,eAAJ,GAEE,OACE,MAAO,CACLC,OAAQ,GACRC,MAAO,OAGX,UACE1C,OAAOmC,MAAM,MAAO,CAClBQ,OAAQ,MACRC,QAAS,CACPC,OAAQ,sBAEhB,kBACA,SACM,KAAN,WAEA,iCC1D8U,ICS1U,G,oBAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCpBX,EAAS,WAAa,IAAIzC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACG,YAAY,mDAAmD,CAACH,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQN,EAAIkB,SAASd,EAAG,IAAI,CAACG,YAAY,iBAAiB,CAACP,EAAIQ,GAAG,WAAWR,EAAIiB,GAAGjB,EAAIkB,MAAMC,mBAAmB,+HAA+Hf,EAAG,OAAO,CAACG,YAAY,gBAAgB,CAACH,EAAG,QAAQ,CAACJ,EAAIQ,GAAG,kBAAkBJ,EAAG,QAAQ,CAACsC,WAAW,CAAC,CAACpE,KAAK,QAAQqE,QAAQ,UAAU5D,MAAOiB,EAAU,OAAE4C,WAAW,WAAWrC,YAAY,qBAAqBD,MAAM,CAAC,YAAc,mBAAmB,KAAO,QAAQuC,SAAS,CAAC,MAAS7C,EAAU,QAAG8C,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOC,OAAOC,YAAqBjD,EAAIkD,OAAOH,EAAOC,OAAOjE,WAAUqB,EAAG,SAAS,CAACG,YAAY,wCAAwCD,MAAM,CAAC,SAAWN,EAAImD,gBAAgBL,GAAG,CAAC,MAAQ,SAASC,GAAgC,OAAxBA,EAAOK,iBAAwBpD,EAAIqD,SAASN,MAAW,CAAC/C,EAAIQ,GAAG,uCAAuCJ,EAAG,MAAM,CAACsC,WAAW,CAAC,CAACpE,KAAK,OAAOqE,QAAQ,SAAS5D,MAAOiB,EAAiB,cAAE4C,WAAW,kBAAkBrC,YAAY,uDAAuD,CAACH,EAAG,OAAO,CAACG,YAAY,yCAAyCuC,GAAG,CAAC,MAAQ,SAASC,GAAQA,EAAOK,iBAAiBpD,EAAIsD,eAAgB,KAAS,CAACtD,EAAIQ,GAAG,OAAOJ,EAAG,KAAK,CAACJ,EAAIQ,GAAG,gCAAgCJ,EAAG,IAAI,CAACJ,EAAIQ,GAAG,6BAA6BJ,EAAG,MAAM,CAACsC,WAAW,CAAC,CAACpE,KAAK,OAAOqE,QAAQ,SAAS5D,MAAOiB,EAAe,YAAE4C,WAAW,gBAAgBrC,YAAY,uDAAuD,CAACH,EAAG,OAAO,CAACG,YAAY,yCAAyCuC,GAAG,CAAC,MAAQ,SAASC,GAAQA,EAAOK,iBAAiBpD,EAAIuD,aAAc,KAAS,CAACvD,EAAIQ,GAAG,OAAOJ,EAAG,KAAK,CAACJ,EAAIQ,GAAG,UAAUJ,EAAG,IAAI,CAACJ,EAAIQ,GAAG,sCAAsCJ,EAAG,IAAI,CAACJ,EAAIQ,GAAG,qDAAqDR,EAAIiB,GAAGjB,EAAIwD,aAAa,8BAA8BpD,EAAG,MAAM,CAACG,YAAY,yCAAyC,CAACH,EAAG,KAAK,CAACG,YAAY,qBAAqB,CAACP,EAAIQ,GAAG,wBAAwBJ,EAAG,MAAMJ,EAAIa,GAAIb,EAAU,QAAE,SAASyD,GAAM,OAAOrD,EAAG,YAAY,CAACf,IAAIoE,EAAKC,GAAGpD,MAAM,CAAC,SAAWmD,QAAU,MAAM,IACnuE,EAAkB,G,wBCDlB,EAAS,WAAa,IAAIzD,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACG,YAAY,4BAA4B,CAACH,EAAG,MAAM,CAACG,YAAY,8BAA8B,CAACH,EAAG,QAAQ,CAACA,EAAG,IAAI,CAACJ,EAAIQ,GAAGR,EAAIiB,GAAGjB,EAAIkB,MAAMC,sBAAsBf,EAAG,OAAO,CAACG,YAAY,gBAAgB,CAACP,EAAIQ,GAAG,IAAIR,EAAIiB,GAAGjB,EAAI2D,kBAAkBvD,EAAG,MAAM,CAACG,YAAY,gBAAgB,CAACH,EAAG,IAAI,CAACyC,SAAS,CAAC,UAAY7C,EAAIiB,GAAGjB,EAAIyD,KAAKG,iBAC3a,EAAkB,GCgBtB,GACErC,MAAO,CACLsC,SAAU,CACRrC,KAAM7E,OACN8E,UAAU,IAGd,OACE,MAAO,CACLgC,KAAM,GACNvC,MAAO,GACP4C,SAAS,IAGbnC,SAAU,CACR,eACE,OAAO1B,KAAKiB,MAAMU,MAAQ3B,KAAKiB,MAAMU,KAAKC,KAE5C,YACE,IACE,MAAM6B,EAAK,IAAIK,IAAI9D,KAAKiB,MAAMwC,IAC9B,OAAOA,EAAGM,KAClB,SACQ,MAAO,MAIblC,QAAS,CACP,cAAcmC,GACZ,MAA0B,kBAAfA,EACF,IAAIC,QAAQ,GAA3B,MAEatE,OAAOmC,YAAYoC,mBAAmBF,KAAe,CAC1D1B,OAAQ,MACRC,QAAS,CACPC,OAAQ,+BAGlB,kBACA,UACQ,KAAR,WACQ,QAAR,mBAIE,UACExC,KAAKmE,cAAcnE,KAAK4D,SAASrE,QACrC,SAEM,OADA,KAAN,OACA,6CAEA,SAAM,KAAN,YCpEkV,ICS9U,G,oBAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCiBf,GACE2C,WAAY,CACVkC,SAAJ,EACIjC,eAAJ,GAEEb,MAAO,CACLjD,KAAM,CACJkD,KAAM8C,OACN7C,UAAU,GAEZ8C,UAAW,CACT/C,KAAMgD,OACNC,QAAS,KAGb,OACE,MAAO,CACLvD,MAAO,GACPwD,OAAQ,GACRpC,MAAO,KACPY,OAAQ,GACRI,eAAe,EACfC,aAAa,EACbJ,gBAAgB,IAGpBxB,SAAU,CACR,kBACE,OAAO1B,KAAKiB,OAASjB,KAAKiB,MAAMU,KAAO3B,KAAKiB,MAAMU,KAAKC,IAAM,IAE/D,cACE,GAAI5B,KAAKiB,MAAMwC,IAAMzD,KAAKiB,MAAMC,kBAAmB,CACjD,MAAMU,EAAM,IAAIjC,OAAOmE,IAAI9D,KAAKiB,MAAMwC,IACtC,UAAWzD,KAAKiB,MAAMC,kBAAkBwD,iBAAiB9C,EAAImC,OAE/D,MAAO,KAGXlC,QAAS,CACP,WACE,IAAI8C,EAAMC,EAAUC,EACpB7E,KAAKqD,eAAgB,EACrBrD,KAAKsD,aAAc,EACnB,IAAN,MACA,mCADA,sBACQ,EADR,KACQ,EADR,KACQ,EADR,KAEA,SAEQ,YADAtD,KAAKqD,eAAgB,GAGvBrD,KAAKkD,gBAAiB,EACtBvD,OAAOmC,iBAAiB+C,yCAA8CF,IAAQ,CAC5ErC,OAAQ,MACRtD,KAAM,OACNuD,QAAS,CACPC,OAAQ,sBAGlB,kBACA,SACQ,MAAR,qEACQ,OAAR,8DAEA,UACQ,QAAR,OACQ,KAAR,iBAEA,UACQ,KAAR,sBAIE,UACE7C,OAAOmC,YAAY9B,KAAK3B,OAAQ,CAC9BiE,OAAQ,MACRC,QAAS,CACPC,OAAQ,+BAEhB,kBACA,SACM,KAAN,UAEA,UACM,OAAN,gCACQ,OAAR,MACQ,KAAR,OACQ,QAAR,CACU,OAAV,iCAIA,kBACA,SACM,KAAN,sBACA,+BACA,0BAEA,iCCrIiV,ICQ7U,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCdfsC,OAAIC,IAAIC,QAEO,UAAIA,OAAO,CACxBhG,KAAM,UACNiG,OAAQ,CACN,CACEC,KAAM,IACN7G,KAAM,OACNsC,UAAWwE,GAEb,CACED,KAAM,WACN7G,KAAM,UACNsC,UAAWyE,EACX9D,OAAO,IAGX+D,eAAgBC,EAAIC,EAAMC,GACxB,OAAIA,GAGK,CAAEC,EAAG,EAAGC,EAAG,MCtBxBZ,OAAIa,OAAOC,eAAgB,EAE3B,IAAId,OAAI,CACNe,SACA/F,OAAQgG,GAAKA,EAAEC,KACdC,OAAO,S,oCCTV,yBAA4c,EAAG,G,kFCA/c,yBAAme,EAAG,G","file":"js/app.0d4cd2d8.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/web/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('div',{staticClass:\"w3-bar w3-black w3-card\"},[_c('div',{staticClass:\"w3-container w3-section\"},[_c('router-link',{attrs:{\"to\":\"/\"}},[_c('i',{staticClass:\"fas fa-home\",attrs:{\"title\":\"home\"}})])],1)]),_c('div',{staticClass:\"w3-row\"},[_c('div',{staticClass:\"w3-col s0 m1 l2\"},[_vm._v(\" \")]),_c('div',{staticClass:\"w3-col s12 m10 l8 w3-content\"},[_c('router-view')],1),_c('div',{staticClass:\"w3-col s0 m1 l2\"},[_vm._v(\" \")])]),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"w3-container w3-padding-64 w3-center w3-opacity w3-light-grey w3-xlarge\"},[_c('a',{attrs:{\"href\":\"https://github.com/wmurphyrd/guppe\"}},[_c('i',{staticClass:\"fab fa-github w3-hover-opacity\"})])])}]\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=c6d41a2e&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-container\"},[_vm._m(0),_c('h1',{staticClass:\"w3-center\"},[_vm._v(\"Guppe Groups\")]),_c('p',[_vm._v(\"\\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\\n people based on shared\\n interests without the maniuplation of your attention to maximize ad revenue nor the\\n walled garden lock-in of capitalist social media.\\n \")]),_c('h2',{staticClass:\"w3-center\"},[_vm._v(\"How does Guppe work?\")]),_c('p',[_vm._v(\"\\n Guppe groups look like regular users you can interact with using your existing account on any\\n ActivityPub service, but they automatically share anything you send them with all of their followers.\\n \")]),_vm._m(1),_c('h2',{staticClass:\"w3-center\"},[_vm._v(\"Active Groups\")]),_c('div',{staticClass:\"profile-grid w3-margin-bottom w3-mobile\"},_vm._l((_vm.groups),function(group){return _c('div',{key:group._id,staticClass:\"w3-card w3-container w3-section\"},[_c('profile-summary',{staticClass:\"profile\",attrs:{\"actor\":group}}),_c('router-link',{attrs:{\"to\":(\"/u/\" + (group.preferredUsername))}},[_vm._v(\"Group profile...\")])],1)}),0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-center\"},[_c('img',{attrs:{\"alt\":\"Guppe logo\",\"src\":\"/f/guppe.png\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ol',[_c('li',[_vm._v(\"Follow a group on @gup.pe to join that group\")]),_c('li',[_vm._v(\"Mention a group on @gup.pe to share a post with everyone in the group\")]),_c('li',[_vm._v(\"New groups are created on demand, just search for or mention @YourGroupNameHere@gup.pe and it will show up\")]),_c('li',[_vm._v(\"Visit a @gup.pe group profile to see the group history\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-center\"},[_c('img',{staticClass:\"w3-image profile-image\",attrs:{\"src\":_vm.groupProfileSrc}}),_c('h2',{staticClass:\"w3-wide\"},[_vm._v(_vm._s(_vm.actor.preferredUsername))]),_c('div',{staticClass:\"w3-container\"},[_c('span',{staticClass:\"w3-container w3-show-inline-block\"},[_c('i',{staticClass:\"fas fa-users\",attrs:{\"title\":\"Group members\"}}),_vm._v(_vm._s(_vm.followerCount))]),_c('span',{staticClass:\"w3-container w3-show-inline-block\"},[_c('i',{staticClass:\"fas fa-mail-bulk\",attrs:{\"title\":\"Group posts\"}}),_vm._v(_vm._s(_vm.postCount))])]),_c('p',{staticClass:\"w3-opacity\"},[_c('i',[_vm._v(_vm._s(_vm.actor.summary))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n \r\n
{{ actor.preferredUsername }}
\r\n
\r\n {{ followerCount}}\r\n {{ postCount}}\r\n
\r\n
{{ actor.summary }}
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileSummary.vue?vue&type=template&id=c1288b72&scoped=true&\"\nimport script from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c1288b72\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n
\r\n \r\n
\r\n
Guppe Groups
\r\n
\r\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\r\n people based on shared\r\n interests without the maniuplation of your attention to maximize ad revenue nor the\r\n walled garden lock-in of capitalist social media.\r\n
\r\n
How does Guppe work?
\r\n
\r\n Guppe groups look like regular users you can interact with using your existing account on any\r\n ActivityPub service, but they automatically share anything you send them with all of their followers.\r\n
\r\n \r\n
Follow a group on @gup.pe to join that group
\r\n
Mention a group on @gup.pe to share a post with everyone in the group
\r\n
New groups are created on demand, just search for or mention @YourGroupNameHere@gup.pe and it will show up
\r\n
Visit a @gup.pe group profile to see the group history
\r\n \r\n
Active Groups
\r\n
\r\n
\r\n \r\n Group profile...\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=9c330358&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9c330358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-container w3-content w3-center w3-padding-32\"},[_c('profile-summary',{attrs:{\"actor\":_vm.actor}}),_c('p',{staticClass:\"w3-left-align\"},[_vm._v(\"To join \"+_vm._s(_vm.actor.preferredUsername)+\", enter your handle below and you'll be\\n redirected back to this group's profile in your app where you can follow it.\")]),_c('form',{staticClass:\"w3-container\"},[_c('label',[_vm._v(\"Your account\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.handle),expression:\"handle\"}],staticClass:\"w3-input w3-center\",attrs:{\"placeholder\":\"user@example.com\",\"type\":\"text\"},domProps:{\"value\":(_vm.handle)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.handle=$event.target.value}}}),_c('button',{staticClass:\"w3-btn w3-cyan w3-block w3-margin-top\",attrs:{\"disabled\":_vm.fetchingRemote},on:{\"click\":function($event){$event.preventDefault();return _vm.doFollow($event)}}},[_vm._v(\"\\n Procced to follow\\n \")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.invalidHandle),expression:\"invalidHandle\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.invalidHandle = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Double check that username\")]),_c('p',[_vm._v(\"e.g. you@yourhost.com\")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.unreachable),expression:\"unreachable\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.unreachable = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Oops\")]),_c('p',[_vm._v(\"Couldn't connect with your host.\")]),_c('p',[_vm._v(\"You could try going back to your app and entering \"+_vm._s(_vm.groupHandle)+\" in the search instead\")])]),_c('div',{staticClass:\"w3-container w3-content w3-padding-64\"},[_c('h2',{staticClass:\"w3-wide w3-center\"},[_vm._v(\"Recent group posts\")]),_c('div',_vm._l((_vm.stream),function(post){return _c('post-card',{key:post.id,attrs:{\"activity\":post}})}),1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-card w3-margin-bottom\"},[_c('div',{staticClass:\"w3-container w3-left-align\"},[_c('label',[_c('b',[_vm._v(_vm._s(_vm.actor.preferredUsername))]),_c('span',{staticClass:\"w3-text-grey\"},[_vm._v(\"@\"+_vm._s(_vm.actorHost))])])]),_c('div',{staticClass:\"w3-container\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.post.content)}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PostCard.vue?vue&type=template&id=26eca70a&scoped=true&\"\nimport script from \"./PostCard.vue?vue&type=script&lang=js&\"\nexport * from \"./PostCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"\nimport style1 from \"./PostCard.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26eca70a\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n \r\n
To join {{ actor.preferredUsername }}, enter your handle below and you'll be\r\n redirected back to this group's profile in your app where you can follow it.
\r\n \r\n
\r\n ×\r\n
Double check that username
\r\n
e.g. you@yourhost.com
\r\n
\r\n
\r\n ×\r\n
Oops
\r\n
Couldn't connect with your host.
\r\n
You could try going back to your app and entering {{ groupHandle }} in the search instead
\r\n
\r\n
\r\n
Recent group posts
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=120217d8&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=js&\"\nexport * from \"./Profile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Profile.vue?vue&type=style&index=0&id=120217d8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"120217d8\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Router from 'vue-router'\nimport Home from './views/Home.vue'\nimport Profile from './views/Profile.vue'\n\nVue.use(Router)\n\nexport default new Router({\n mode: 'history',\n routes: [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/u/:name',\n name: 'profile',\n component: Profile,\n props: true\n }\n ],\n scrollBehavior (to, from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n})\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\n\r\nVue.config.productionTip = false\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=120217d8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=120217d8&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/web/dist/js/app.6e4929ce.js b/web/dist/js/app.6e4929ce.js
new file mode 100644
index 0000000..0e19dbd
--- /dev/null
+++ b/web/dist/js/app.6e4929ce.js
@@ -0,0 +1,2 @@
+(function(t){function e(e){for(var o,s,i=e[0],c=e[1],l=e[2],p=0,h=[];pt.json()).then(t=>{this.followerCount=t.totalItems}),window.fetch(this.actor.outbox,{method:"get",headers:{accept:"application/activity+json"}}).then(t=>t.json()).then(t=>{this.postCount=t.totalItems})}},created(){this.fetchInfo()},updated(){this.fetchInfo()}},m=w,v=(r("13f2"),Object(s["a"])(m,d,f,!1,null,"c1288b72",null)),g=v.exports,b={name:"home",components:{ProfileSummary:g},data(){return{groups:[],error:null}},created(){window.fetch("/u/",{method:"get",headers:{accept:"application/json"}}).then(t=>t.json()).then(t=>{this.groups=t}).catch(t=>this.error=t.message)}},y=b,_=(r("4bbd"),r("2154"),Object(s["a"])(y,p,h,!1,null,"9c330358",null)),C=_.exports,j=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"w3-container w3-content w3-center w3-padding-32"},[r("profile-summary",{attrs:{actor:t.actor}}),r("p",{staticClass:"w3-left-align"},[t._v("To join "+t._s(t.actor.preferredUsername)+", enter your handle below and you'll be\n redirected back to this group's profile in your app where you can follow it.")]),r("form",{staticClass:"w3-container"},[r("label",[t._v("Your account")]),r("input",{directives:[{name:"model",rawName:"v-model",value:t.handle,expression:"handle"}],staticClass:"w3-input w3-center",attrs:{placeholder:"user@example.com",type:"text"},domProps:{value:t.handle},on:{input:function(e){e.target.composing||(t.handle=e.target.value)}}}),r("button",{staticClass:"w3-btn w3-cyan w3-block w3-margin-top",attrs:{disabled:t.fetchingRemote},on:{click:function(e){return e.preventDefault(),t.doFollow(e)}}},[t._v("\n Procced to follow\n ")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:t.invalidHandle,expression:"invalidHandle"}],staticClass:"w3-panel w3-pale-red w3-display-container w3-border"},[r("span",{staticClass:"w3-button w3-large w3-display-topright",on:{click:function(e){e.preventDefault(),t.invalidHandle=!1}}},[t._v("×")]),r("h3",[t._v("Double check that username")]),r("p",[t._v("e.g. you@yourhost.com")])]),r("div",{directives:[{name:"show",rawName:"v-show",value:t.unreachable,expression:"unreachable"}],staticClass:"w3-panel w3-pale-red w3-display-container w3-border"},[r("span",{staticClass:"w3-button w3-large w3-display-topright",on:{click:function(e){e.preventDefault(),t.unreachable=!1}}},[t._v("×")]),r("h3",[t._v("Oops")]),r("p",[t._v("Couldn't connect with your host.")]),r("p",[t._v("You could try going back to your app and entering @"+t._s(t.groupHandle)+" in the search instead")])]),r("div",{staticClass:"w3-container w3-content w3-padding-64"},[r("h2",{staticClass:"w3-wide w3-center"},[t._v("Recent group posts")]),r("div",t._l(t.stream,(function(t){return r("post-card",{key:t.id,attrs:{activity:t}})})),1)])],1)},k=[],x=(r("a481"),r("3835")),O=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"w3-card w3-margin-bottom"},[r("div",{staticClass:"w3-container w3-left-align"},[r("label",[r("b",[t._v(t._s(t.actor.preferredUsername))]),r("span",{staticClass:"w3-text-grey"},[t._v("@"+t._s(t.actorHost))])])]),r("div",{staticClass:"w3-container"},[r("p",{domProps:{innerHTML:t._s(t.post.content)}})])])},P=[],$={props:{activity:{type:Object,required:!0}},data(){return{post:{},actor:{},isError:!1}},computed:{actorIconUrl(){return this.actor.icon&&this.actor.icon.url},actorHost(){try{const t=new URL(this.actor.id);return t.host}catch(t){return""}}},methods:{resolveObject(t){return"string"!==typeof t?new Promise(e=>e(t)):window.fetch(`/o/${encodeURIComponent(t)}`,{method:"get",headers:{accept:"application/activity+json"}}).then(t=>t.json()).catch(t=>{this.isError=!0,console.log(t.message)})}},created(){this.resolveObject(this.activity.object).then(t=>{return this.post=t,this.resolveObject(this.post.attributedTo)}).then(t=>{this.actor=t})}},H=$,G=(r("4a48"),r("582d"),Object(s["a"])(H,O,P,!1,null,"26eca70a",null)),S=G.exports,E={components:{PostCard:S,ProfileSummary:g},props:{name:{type:String,required:!0},postLimit:{type:Number,default:20}},data(){return{actor:{},stream:{},error:null,handle:"",invalidHandle:!1,unreachable:!1,fetchingRemote:!1}},computed:{groupProfileSrc(){return this.actor&&this.actor.icon?this.actor.icon.url:""},groupHandle(){if(this.actor.id&&this.actor.preferredUsername){const t=new window.URL(this.actor.id);return`${this.actor.preferredUsername.toLowerCase()}@${t.host}`}return""}},methods:{doFollow(){let t,e,r;this.invalidHandle=!1,this.unreachable=!1;try{var o=/@?([^@]+)@(.+)/.exec(this.handle),n=Object(x["a"])(o,3);t=n[0],e=n[1],r=n[2]}catch(a){return void(this.invalidHandle=!0)}this.fetchingRemote=!0,window.fetch(`https://${r}/.well-known/webfinger?resource=acct:${t}`,{method:"get",mode:"cors",headers:{accept:"application/json"}}).then(t=>t.json()).then(t=>{const e=t.links.find(t=>"http://ostatus.org/schema/1.0/subscribe"===t.rel);window.location.href=e.template.replace("{uri}",this.groupHandle)}).catch(t=>{console.log(t),this.unreachable=!0}).then(()=>{this.fetchingRemote=!1})}},created(){window.fetch(`/u/${this.name}`,{method:"get",headers:{accept:"application/activity+json"}}).then(t=>t.json()).then(t=>{this.actor=t}).then(()=>{return window.fetch(this.actor.outbox,{method:"get",mode:"cors",headers:{accept:"application/activity+json"}})}).then(t=>t.json()).then(t=>{this.stream=t.orderedItems.filter(t=>"Announce"===t.type).slice(0,this.postLimit)}).catch(t=>this.error=t.message)}},U=E,I=(r("053e"),Object(s["a"])(U,j,k,!1,null,"2eec363b",null)),R=I.exports;o["a"].use(u["a"]);var L=new u["a"]({mode:"history",routes:[{path:"/",name:"home",component:C},{path:"/u/:name",name:"profile",component:R,props:!0}],scrollBehavior(t,e,r){return r||{x:0,y:0}}});o["a"].config.productionTip=!1,new o["a"]({router:L,render:t=>t(l)}).$mount("#app")},"582d":function(t,e,r){"use strict";var o=r("c8b5"),n=r.n(o);n.a},"64a9":function(t,e,r){},9838:function(t,e,r){},c8b5:function(t,e,r){},cbf7:function(t,e,r){},e996:function(t,e,r){}});
+//# sourceMappingURL=app.6e4929ce.js.map
\ No newline at end of file
diff --git a/web/dist/js/app.6e4929ce.js.map b/web/dist/js/app.6e4929ce.js.map
new file mode 100644
index 0000000..d714994
--- /dev/null
+++ b/web/dist/js/app.6e4929ce.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?5b85","webpack:///./src/views/Profile.vue?6c60","webpack:///./src/components/ProfileSummary.vue?63ae","webpack:///./src/views/Home.vue?71a3","webpack:///./src/components/PostCard.vue?361f","webpack:///./src/views/Home.vue?d740","webpack:///./src/App.vue?513f","webpack:///./src/App.vue","webpack:///./src/views/Home.vue?2d46","webpack:///./src/components/ProfileSummary.vue?fedb","webpack:///src/components/ProfileSummary.vue","webpack:///./src/components/ProfileSummary.vue?8b29","webpack:///./src/components/ProfileSummary.vue","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?2b8c","webpack:///./src/views/Home.vue","webpack:///./src/views/Profile.vue?06b7","webpack:///./src/components/PostCard.vue?9cd5","webpack:///src/components/PostCard.vue","webpack:///./src/components/PostCard.vue?9bcd","webpack:///./src/components/PostCard.vue","webpack:///src/views/Profile.vue","webpack:///./src/views/Profile.vue?7078","webpack:///./src/views/Profile.vue","webpack:///./src/router.js","webpack:///./src/main.js","webpack:///./src/components/PostCard.vue?afbb"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","_m","staticRenderFns","script","component","_l","group","_id","groupProfileSrc","_s","actor","preferredUsername","followerCount","postCount","summary","props","type","required","undefined","computed","icon","url","methods","fetch","followers","outbox","fetchInfo","components","ProfileSummary","groups","error","method","headers","accept","directives","rawName","expression","domProps","on","$event","target","composing","handle","fetchingRemote","preventDefault","doFollow","invalidHandle","unreachable","groupHandle","post","id","actorHost","content","activity","isError","URL","host","idOrObject","Promise","encodeURIComponent","resolveObject","PostCard","String","postLimit","Number","default","stream","toLowerCase","acct","username","domain","Vue","use","Router","routes","path","Home","Profile","scrollBehavior","to","from","savedPosition","x","y","config","productionTip","router","h","App","$mount"],"mappings":"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","file":"js/app.6e4929ce.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/web/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=2eec363b&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=style&index=0&id=2eec363b&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('div',{staticClass:\"w3-bar w3-black w3-card\"},[_c('div',{staticClass:\"w3-container w3-section\"},[_c('router-link',{attrs:{\"to\":\"/\"}},[_c('i',{staticClass:\"fas fa-home\",attrs:{\"title\":\"home\"}})])],1)]),_c('div',{staticClass:\"w3-row\"},[_c('div',{staticClass:\"w3-col s0 m1 l2\"},[_vm._v(\" \")]),_c('div',{staticClass:\"w3-col s12 m10 l8 w3-content\"},[_c('router-view')],1),_c('div',{staticClass:\"w3-col s0 m1 l2\"},[_vm._v(\" \")])]),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"w3-container w3-padding-64 w3-center w3-opacity w3-light-grey w3-xlarge\"},[_c('a',{attrs:{\"href\":\"https://github.com/wmurphyrd/guppe\"}},[_c('i',{staticClass:\"fab fa-github w3-hover-opacity\"})])])}]\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=c6d41a2e&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-container\"},[_vm._m(0),_c('h1',{staticClass:\"w3-center\"},[_vm._v(\"Guppe Groups\")]),_c('p',[_vm._v(\"\\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\\n people based on shared\\n interests without the maniuplation of your attention to maximize ad revenue nor the\\n walled garden lock-in of capitalist social media.\\n \")]),_c('h2',{staticClass:\"w3-center\"},[_vm._v(\"How does Guppe work?\")]),_c('p',[_vm._v(\"\\n Guppe groups look like regular users you can interact with using your existing account on any\\n ActivityPub service, but they automatically share anything you send them with all of their followers.\\n \")]),_vm._m(1),_c('h2',{staticClass:\"w3-center\"},[_vm._v(\"Active Groups\")]),_c('div',{staticClass:\"profile-grid w3-margin-bottom w3-mobile\"},_vm._l((_vm.groups),function(group){return _c('div',{key:group._id,staticClass:\"w3-card w3-container w3-section\"},[_c('profile-summary',{staticClass:\"profile\",attrs:{\"actor\":group}}),_c('router-link',{attrs:{\"to\":(\"/u/\" + (group.preferredUsername))}},[_vm._v(\"Group profile...\")])],1)}),0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-center\"},[_c('img',{attrs:{\"alt\":\"Guppe logo\",\"src\":\"/f/guppe.png\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ol',[_c('li',[_vm._v(\"Follow a group on @gup.pe to join that group\")]),_c('li',[_vm._v(\"Mention a group on @gup.pe to share a post with everyone in the group\")]),_c('li',[_vm._v(\"New groups are created on demand, just search for or mention @YourGroupNameHere@gup.pe and it will show up\")]),_c('li',[_vm._v(\"Visit a @gup.pe group profile to see the group history\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-center\"},[_c('img',{staticClass:\"w3-image profile-image\",attrs:{\"src\":_vm.groupProfileSrc}}),_c('h2',{staticClass:\"w3-wide\"},[_vm._v(_vm._s(_vm.actor.preferredUsername))]),_c('div',{staticClass:\"w3-container\"},[_c('span',{staticClass:\"w3-container w3-show-inline-block\"},[_c('i',{staticClass:\"fas fa-users\",attrs:{\"title\":\"Group members\"}}),_vm._v(_vm._s(_vm.followerCount))]),_c('span',{staticClass:\"w3-container w3-show-inline-block\"},[_c('i',{staticClass:\"fas fa-mail-bulk\",attrs:{\"title\":\"Group posts\"}}),_vm._v(_vm._s(_vm.postCount))])]),_c('p',{staticClass:\"w3-opacity\"},[_c('i',[_vm._v(_vm._s(_vm.actor.summary))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n \r\n
{{ actor.preferredUsername }}
\r\n
\r\n {{ followerCount}}\r\n {{ postCount}}\r\n
\r\n
{{ actor.summary }}
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProfileSummary.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProfileSummary.vue?vue&type=template&id=c1288b72&scoped=true&\"\nimport script from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nexport * from \"./ProfileSummary.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProfileSummary.vue?vue&type=style&index=0&id=c1288b72&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c1288b72\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n
\r\n \r\n
\r\n
Guppe Groups
\r\n
\r\n Guppe brings social groups to the fediverse — making it easy to connect and meet new\r\n people based on shared\r\n interests without the maniuplation of your attention to maximize ad revenue nor the\r\n walled garden lock-in of capitalist social media.\r\n
\r\n
How does Guppe work?
\r\n
\r\n Guppe groups look like regular users you can interact with using your existing account on any\r\n ActivityPub service, but they automatically share anything you send them with all of their followers.\r\n
\r\n \r\n
Follow a group on @gup.pe to join that group
\r\n
Mention a group on @gup.pe to share a post with everyone in the group
\r\n
New groups are created on demand, just search for or mention @YourGroupNameHere@gup.pe and it will show up
\r\n
Visit a @gup.pe group profile to see the group history
\r\n \r\n
Active Groups
\r\n
\r\n
\r\n \r\n Group profile...\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=9c330358&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=9c330358&scoped=true&lang=css&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9c330358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-container w3-content w3-center w3-padding-32\"},[_c('profile-summary',{attrs:{\"actor\":_vm.actor}}),_c('p',{staticClass:\"w3-left-align\"},[_vm._v(\"To join \"+_vm._s(_vm.actor.preferredUsername)+\", enter your handle below and you'll be\\n redirected back to this group's profile in your app where you can follow it.\")]),_c('form',{staticClass:\"w3-container\"},[_c('label',[_vm._v(\"Your account\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.handle),expression:\"handle\"}],staticClass:\"w3-input w3-center\",attrs:{\"placeholder\":\"user@example.com\",\"type\":\"text\"},domProps:{\"value\":(_vm.handle)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.handle=$event.target.value}}}),_c('button',{staticClass:\"w3-btn w3-cyan w3-block w3-margin-top\",attrs:{\"disabled\":_vm.fetchingRemote},on:{\"click\":function($event){$event.preventDefault();return _vm.doFollow($event)}}},[_vm._v(\"\\n Procced to follow\\n \")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.invalidHandle),expression:\"invalidHandle\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.invalidHandle = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Double check that username\")]),_c('p',[_vm._v(\"e.g. you@yourhost.com\")])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.unreachable),expression:\"unreachable\"}],staticClass:\"w3-panel w3-pale-red w3-display-container w3-border\"},[_c('span',{staticClass:\"w3-button w3-large w3-display-topright\",on:{\"click\":function($event){$event.preventDefault();_vm.unreachable = false}}},[_vm._v(\"×\")]),_c('h3',[_vm._v(\"Oops\")]),_c('p',[_vm._v(\"Couldn't connect with your host.\")]),_c('p',[_vm._v(\"You could try going back to your app and entering @\"+_vm._s(_vm.groupHandle)+\" in the search instead\")])]),_c('div',{staticClass:\"w3-container w3-content w3-padding-64\"},[_c('h2',{staticClass:\"w3-wide w3-center\"},[_vm._v(\"Recent group posts\")]),_c('div',_vm._l((_vm.stream),function(post){return _c('post-card',{key:post.id,attrs:{\"activity\":post}})}),1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"w3-card w3-margin-bottom\"},[_c('div',{staticClass:\"w3-container w3-left-align\"},[_c('label',[_c('b',[_vm._v(_vm._s(_vm.actor.preferredUsername))]),_c('span',{staticClass:\"w3-text-grey\"},[_vm._v(\"@\"+_vm._s(_vm.actorHost))])])]),_c('div',{staticClass:\"w3-container\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.post.content)}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PostCard.vue?vue&type=template&id=26eca70a&scoped=true&\"\nimport script from \"./PostCard.vue?vue&type=script&lang=js&\"\nexport * from \"./PostCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PostCard.vue?vue&type=style&index=0&id=26eca70a&scoped=true&lang=css&\"\nimport style1 from \"./PostCard.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26eca70a\",\n null\n \n)\n\nexport default component.exports","\r\n
\r\n \r\n
To join {{ actor.preferredUsername }}, enter your handle below and you'll be\r\n redirected back to this group's profile in your app where you can follow it.
\r\n \r\n
\r\n ×\r\n
Double check that username
\r\n
e.g. you@yourhost.com
\r\n
\r\n
\r\n ×\r\n
Oops
\r\n
Couldn't connect with your host.
\r\n
You could try going back to your app and entering @{{ groupHandle }} in the search instead
\r\n
\r\n
\r\n
Recent group posts
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=2eec363b&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=js&\"\nexport * from \"./Profile.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Profile.vue?vue&type=style&index=0&id=2eec363b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2eec363b\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Router from 'vue-router'\nimport Home from './views/Home.vue'\nimport Profile from './views/Profile.vue'\n\nVue.use(Router)\n\nexport default new Router({\n mode: 'history',\n routes: [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/u/:name',\n name: 'profile',\n component: Profile,\n props: true\n }\n ],\n scrollBehavior (to, from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n})\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\n\r\nVue.config.productionTip = false\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostCard.vue?vue&type=style&index=1&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/web/src/views/Profile.vue b/web/src/views/Profile.vue
index 638fbee..cedf736 100644
--- a/web/src/views/Profile.vue
+++ b/web/src/views/Profile.vue
@@ -20,7 +20,7 @@
×
Oops
Couldn't connect with your host.
-
You could try going back to your app and entering {{ groupHandle }} in the search instead
+
You could try going back to your app and entering @{{ groupHandle }} in the search instead