From a48291415dd301175b038856523881d337574566 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sun, 13 Sep 2020 19:55:25 -0600 Subject: [PATCH 01/21] Re-map all documentation to Roam --- _docs/blogs.md | 1 - _docs/calandar.md | 1 - _docs/calbot.md | 1 - _docs/carl.md | 1 - _docs/cname.md | 1 - _docs/create_post.md | 1 - _docs/deploy.md | 1 - _docs/discord.md | 1 - _docs/dns.md | 1 - _docs/docs.md | 1 - _docs/editme.dot | 111 -------------------------------------- _docs/facebook.md | 1 - _docs/feedupdates.md | 1 - _docs/forms.md | 1 - _docs/github.md | 1 - _docs/gmail.md | 1 - _docs/hostproj.md | 1 - _docs/ifttt.md | 1 - _docs/index.md | 13 ----- _docs/internet.md | 1 - _docs/invite.md | 1 - _docs/jekyll.md | 1 - _docs/knack.md | 1 - _docs/linkedin.md | 1 - _docs/mdfiles.md | 1 - _docs/netlify.md | 1 - _docs/netlifyrt.md | 1 - _docs/newby.md | 1 - _docs/newuserdata.md | 1 - _docs/prune.md | 1 - _docs/reminders.md | 1 - _docs/rendered website.md | 1 - _docs/roam.md | 1 - _docs/substack.md | 1 - _docs/twitter.md | 1 - _docs/usercont.md | 1 - _docs/website.md | 1 - _docs/websites.md | 1 - _docs/welcomer.md | 1 - _docs/welcoming.md | 1 - _docs/yak_shaver.md | 1 - _docs/yakyak.md | 1 - _docs/zapier.md | 1 - editme.dot | 109 +++++++++++++++++++++++++++++++++++++ index.html | 62 +++------------------ 45 files changed, 115 insertions(+), 221 deletions(-) delete mode 100644 _docs/blogs.md delete mode 100644 _docs/calandar.md delete mode 100644 _docs/calbot.md delete mode 100644 _docs/carl.md delete mode 100644 _docs/cname.md delete mode 100644 _docs/create_post.md delete mode 100644 _docs/deploy.md delete mode 100644 _docs/discord.md delete mode 100644 _docs/dns.md delete mode 100644 _docs/docs.md delete mode 100644 _docs/editme.dot delete mode 100644 _docs/facebook.md delete mode 100644 _docs/feedupdates.md delete mode 100644 _docs/forms.md delete mode 100644 _docs/github.md delete mode 100644 _docs/gmail.md delete mode 100644 _docs/hostproj.md delete mode 100644 _docs/ifttt.md delete mode 100644 _docs/index.md delete mode 100644 _docs/internet.md delete mode 100644 _docs/invite.md delete mode 100644 _docs/jekyll.md delete mode 100644 _docs/knack.md delete mode 100644 _docs/linkedin.md delete mode 100644 _docs/mdfiles.md delete mode 100644 _docs/netlify.md delete mode 100644 _docs/netlifyrt.md delete mode 100644 _docs/newby.md delete mode 100644 _docs/newuserdata.md delete mode 100644 _docs/prune.md delete mode 100644 _docs/reminders.md delete mode 100644 _docs/rendered website.md delete mode 100644 _docs/roam.md delete mode 100644 _docs/substack.md delete mode 100644 _docs/twitter.md delete mode 100644 _docs/usercont.md delete mode 100644 _docs/website.md delete mode 100644 _docs/websites.md delete mode 100644 _docs/welcomer.md delete mode 100644 _docs/welcoming.md delete mode 100644 _docs/yak_shaver.md delete mode 100644 _docs/yakyak.md delete mode 100644 _docs/zapier.md create mode 100644 editme.dot diff --git a/_docs/blogs.md b/_docs/blogs.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/blogs.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/calandar.md b/_docs/calandar.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/calandar.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/calbot.md b/_docs/calbot.md deleted file mode 100644 index 6aca028..0000000 --- a/_docs/calbot.md +++ /dev/null @@ -1 +0,0 @@ -bot on carl.gg that reads calandar events and pushes them to #event channel on discord diff --git a/_docs/carl.md b/_docs/carl.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/carl.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/cname.md b/_docs/cname.md deleted file mode 100644 index 7f959c6..0000000 --- a/_docs/cname.md +++ /dev/null @@ -1 +0,0 @@ -not quite sure how netlify uses CNAME record diff --git a/_docs/create_post.md b/_docs/create_post.md deleted file mode 100644 index f22a596..0000000 --- a/_docs/create_post.md +++ /dev/null @@ -1 +0,0 @@ -netlify function that pushs a post to github (which causes a rebuild) and to discord channel #writings diff --git a/_docs/deploy.md b/_docs/deploy.md deleted file mode 100644 index 4cf535b..0000000 --- a/_docs/deploy.md +++ /dev/null @@ -1 +0,0 @@ -netlify deploys the website by distributing it through its content delivery network, so we need no server diff --git a/_docs/discord.md b/_docs/discord.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/discord.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/dns.md b/_docs/dns.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/dns.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/docs.md b/_docs/docs.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/docs.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/editme.dot b/_docs/editme.dot deleted file mode 100644 index f2ef1cd..0000000 --- a/_docs/editme.dot +++ /dev/null @@ -1,111 +0,0 @@ -#a dot file which includes all our IT infrastructure -#unlike standard dot, we have some macros here -# %%XXX%%% means there is a file XXX.md with explanation. all items AND links should have one, so please create -# some keywords in uppercase, like TOOL, DATA, WEBSERVICE were defined in replacings.sed and now down below and contain formatting instructions -# all other dot thingees apply -# rendering is using plain dot - - -#{ #start substitution definitions no spaces before name. hash (#) after name. comment optional -#WEBSITE#[shape=doublecircle][color=green] #a site we expect _members_ (or at least non-sys admins) to use the site-provided ui sometimes -#WEBSERVICE#[shape=egg][color=green] #mainly used to transform data. of course, somebody needs to use the ui at some point -#USERSITE#[shape=triangle][color=green] #something individual members deal with indepdnent of YC -#TOOL#[shape=rectangle][color=blue] # a software tool -#DATA#[color=red] #data -#FUNCTION#[color=black] #a function -#} #end substitution definitions - -digraph G { -labelloc="t"; -label="map of yak collective IT infrastructure (work in progress)"; - -#components - - -calandar WEBSITE[label="google\ncalandar"]%%calandar%%; -docs WEBSITE[label="google docs"]%%docs%%; -forms WEBSITE[label="registration\nform"]%%forms%%; -ifttt WEBSERVICE[label="IFTT"]%%ifttt%%; -dns WEBSERVICE[label="Namecheap"]%%dns%%; -github WEBSERVICE[label="GitHub"]%%github%%; -netlify WEBSERVICE[label="Netlify"]%%netlify%%; -jekyll TOOL[label="Jekyll"]%%jekyll%%; -internet WEBSERVICE[label="Internet"]%%internet%%; -carl WEBSERVICE[label="Carl"]%%carl%%; - -discord WEBSITE[label="Discord"]%%discord%%; -twitter WEBSERVICE[label="Twitter"]%%twitter%%; - -welcomer TOOL[label="welcome bot"]%%welcomer%% -yakyak TOOL[label="yakyak carl-bot"]%%yakyak%% - -#the website -subgraph cluster_4 { - labelloc="t"; - label="website functionality"; - website WEBSITE[label="Yakcollective.org"]%%website%%; - netlifyrt WEBSERVICE[label="netlify\nbackending"]%%netlifyrt%%; - -} - -#things i do not know how to connect -subgraph cluster_0 { - labelloc="t"; - label="not sure what connection is (yet)"; - - zapier WEBSERVICE[label="Zapier"]%%zapier%%; - -} - -#things not connected by IT with rest of infrastructure and managed seperatly and not used by members -subgraph cluster_1 { - labelloc="t"; - label="unconnected and manually managed\nnot by members"; - - gmail WEBSERVICE[label="yakcollective.org\n@gmail.com"]%%gmail%%; - facebook WEBSERVICE[label="Facebook"]%%facebook%%; - linkedin WEBSERVICE[label="Linkedin"]%%linkedin%%; -} - -#things in process of connection with rest of infrastructure -subgraph cluster_2 { - labelloc="t"; - label="in next version or two should be connected"; - - knack WEBSITE[label="Knack"]%%knack%%; - roam WEBSITE[label="Roam"]%%roam%%; - yak_scraper TOOL[label="yak_scraper"]%%yak_scraper%% - -} - -#things that represent user generated data on web -subgraph cluster_3 { - labelloc="t"; - label="members' web presence"; - - substack USERSITE[label="Substack"]%%substack%%; - blogs USERSITE[label="member\nblogs"]%%blogs%%; - websites USERSITE[label="member\nwebsites"]%%websites%%; - -} - -#links -website->ifttt->twitter DATA[label="feedupdates"]%%feedupdates%%; -{substack, blogs,websites}->netlifyrt DATA[label="member-generated\nweb-content"]%%usercont%%; -netlifyrt->{github,discord} FUNCTION[label="create_post"]%%create_post%%; -dns->netlify DATA[label="CNAME"]%%cname%%; -website->forms DATA[label="minimal\nuser data"]%%newuserdata%%; -forms->discord FUNCTION[label="invite"]%%invite%%; -discord->welcomer DATA[label="newby"]%%newby%%; -welcomer->discord FUNCTION[label="welcoming"]%%welcoming%%; -discord->yakyak DATA[label="newby"]%%newby%%; -yakyak->discord FUNCTION[label="prune"]%%prune%%; - -welcomer->discord FUNCTION[label="welcome\nnew user"]%%welcoming%% -docs->website FUNCTION[label="host\nprojects"]%%hostproj%%; -calandar->carl FUNCTION[label="calandar yak"]%%calbot%%; -carl->discord DATA[label="reminders"]%%reminders%%; -github->jekyll DATA[label="md files\nand others"]%%mdfiles%%; -jekyll->netlify DATA [label="Rendered\nwebsite"]%%rendered website%%; -netlify->{internet,website} DATA[label="Deploy"]%%deploy%%; -} diff --git a/_docs/facebook.md b/_docs/facebook.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/facebook.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/feedupdates.md b/_docs/feedupdates.md deleted file mode 100644 index 6ba4903..0000000 --- a/_docs/feedupdates.md +++ /dev/null @@ -1 +0,0 @@ -website generates feedupdates at buildtime (including "featured user") and using a function, which is then sent for twitting. is this accurate? diff --git a/_docs/forms.md b/_docs/forms.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/forms.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/github.md b/_docs/github.md deleted file mode 100644 index ac9ccd2..0000000 --- a/_docs/github.md +++ /dev/null @@ -1 +0,0 @@ -we use github to store our raw data (other than user data) diff --git a/_docs/gmail.md b/_docs/gmail.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/gmail.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/hostproj.md b/_docs/hostproj.md deleted file mode 100644 index 8a656fc..0000000 --- a/_docs/hostproj.md +++ /dev/null @@ -1 +0,0 @@ -some projects have their main data files hosted on google docs diff --git a/_docs/ifttt.md b/_docs/ifttt.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/ifttt.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/index.md b/_docs/index.md deleted file mode 100644 index b3d0312..0000000 --- a/_docs/index.md +++ /dev/null @@ -1,13 +0,0 @@ -#Yak Documentation tool - -A graphic layout where each text item is clickable and leads to a descriptive file. hosted on github pages. - -use links below to edit docs. use github editor to edit layout of file [editme.dot](https://github.com/tilnow/tilnow.github.io/edit/master/editme.dot) - -[link to show-only version](displayable.svg) - -[link to editable version](editable.svg) - - - - diff --git a/_docs/internet.md b/_docs/internet.md deleted file mode 100644 index 8ec45b0..0000000 --- a/_docs/internet.md +++ /dev/null @@ -1 +0,0 @@ -hopefully, this needs no explanation. but i wanted all text segments to work as a link diff --git a/_docs/invite.md b/_docs/invite.md deleted file mode 100644 index 887c9c0..0000000 --- a/_docs/invite.md +++ /dev/null @@ -1 +0,0 @@ -we use an invite to discord issued by @vgr diff --git a/_docs/jekyll.md b/_docs/jekyll.md deleted file mode 100644 index 8b25255..0000000 --- a/_docs/jekyll.md +++ /dev/null @@ -1 +0,0 @@ -we now use jekyll to build our website but are thinking of moving to [gatsby](https://www.gatsbyjs.com/) because it is REACT based \ No newline at end of file diff --git a/_docs/knack.md b/_docs/knack.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/knack.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/linkedin.md b/_docs/linkedin.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/linkedin.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/mdfiles.md b/_docs/mdfiles.md deleted file mode 100644 index 74c8f89..0000000 --- a/_docs/mdfiles.md +++ /dev/null @@ -1 +0,0 @@ -mdfiles use the [markdown format](https://www.markdownguide.org/), to give formatting options diff --git a/_docs/netlify.md b/_docs/netlify.md deleted file mode 100644 index 7776b4e..0000000 --- a/_docs/netlify.md +++ /dev/null @@ -1 +0,0 @@ -we use netlify (...) to manage our buidl process. when you comit to github, netlify rebuilds. we have netlify set up on several of the branches in gitgub \ No newline at end of file diff --git a/_docs/netlifyrt.md b/_docs/netlifyrt.md deleted file mode 100644 index 68be663..0000000 --- a/_docs/netlifyrt.md +++ /dev/null @@ -1 +0,0 @@ -netlify provides some backend functions, like "post_create" which run in RT after build diff --git a/_docs/newby.md b/_docs/newby.md deleted file mode 100644 index 5c03b87..0000000 --- a/_docs/newby.md +++ /dev/null @@ -1 +0,0 @@ -only the fact somebody joined diff --git a/_docs/newuserdata.md b/_docs/newuserdata.md deleted file mode 100644 index bd56817..0000000 --- a/_docs/newuserdata.md +++ /dev/null @@ -1 +0,0 @@ -we ask user a minimal amount of information and send it to google forms diff --git a/_docs/prune.md b/_docs/prune.md deleted file mode 100644 index bec8bec..0000000 --- a/_docs/prune.md +++ /dev/null @@ -1 +0,0 @@ -if an invitee has not done anything after a week, you are pruned diff --git a/_docs/reminders.md b/_docs/reminders.md deleted file mode 100644 index 3943472..0000000 --- a/_docs/reminders.md +++ /dev/null @@ -1 +0,0 @@ -reminders generated by google calandar diff --git a/_docs/rendered website.md b/_docs/rendered website.md deleted file mode 100644 index efab82b..0000000 --- a/_docs/rendered website.md +++ /dev/null @@ -1 +0,0 @@ -the rendered website needs to be deployed, which netlify does, to its own CDN diff --git a/_docs/roam.md b/_docs/roam.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/roam.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/substack.md b/_docs/substack.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/substack.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/twitter.md b/_docs/twitter.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/twitter.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/usercont.md b/_docs/usercont.md deleted file mode 100644 index de9593f..0000000 --- a/_docs/usercont.md +++ /dev/null @@ -1 +0,0 @@ -data generated by users elsewhere that we hightlight or link to on website diff --git a/_docs/website.md b/_docs/website.md deleted file mode 100644 index a9d117e..0000000 --- a/_docs/website.md +++ /dev/null @@ -1 +0,0 @@ -our website is *great* and includes... \ No newline at end of file diff --git a/_docs/websites.md b/_docs/websites.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/websites.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/_docs/welcomer.md b/_docs/welcomer.md deleted file mode 100644 index 7493efb..0000000 --- a/_docs/welcomer.md +++ /dev/null @@ -1 +0,0 @@ -says hellow to new users and tells them to submit and introduction diff --git a/_docs/welcoming.md b/_docs/welcoming.md deleted file mode 100644 index a16f418..0000000 --- a/_docs/welcoming.md +++ /dev/null @@ -1 +0,0 @@ -say hello to user with soem info and tell them to post introduction, or else diff --git a/_docs/yak_shaver.md b/_docs/yak_shaver.md deleted file mode 100644 index b6441a2..0000000 --- a/_docs/yak_shaver.md +++ /dev/null @@ -1 +0,0 @@ -reads discord names, id and role data and sends it to github which then sends to knack and back to website generation. under development diff --git a/_docs/yakyak.md b/_docs/yakyak.md deleted file mode 100644 index 161c77f..0000000 --- a/_docs/yakyak.md +++ /dev/null @@ -1 +0,0 @@ -i think this deletes plain yaks with no introduction after a week diff --git a/_docs/zapier.md b/_docs/zapier.md deleted file mode 100644 index 1a4e16b..0000000 --- a/_docs/zapier.md +++ /dev/null @@ -1 +0,0 @@ -please write *me* diff --git a/editme.dot b/editme.dot new file mode 100644 index 0000000..ff58d81 --- /dev/null +++ b/editme.dot @@ -0,0 +1,109 @@ +#a dot file which includes all our IT infrastructure +#unlike standard dot, we have some macros here +# %%XXX%%% means there is a file XXX.md with explanation. all items AND links should have one, so please create +# some keywords in uppercase, like TOOL, DATA, WEBSERVICE were defined in replacings.sed and now down below and contain formatting instructions +# all other dot thingees apply +# rendering is using plain dot + + +#{ #start substitution definitions no spaces before name. hash (#) after name. comment optional +#WEBSITE#[shape=doublecircle][color=green] #a site we expect _members_ (or at least non-sys admins) to use the site-provided ui sometimes +#WEBSERVICE#[shape=egg][color=green] #mainly used to transform data. of course, somebody needs to use the ui at some point +#USERSITE#[shape=triangle][color=green] #something individual members deal with indepdnent of YC +#TOOL#[shape=rectangle][color=blue] # a software tool +#DATA#[color=red] #data +#FUNCTION#[color=black] #a function +#} #end substitution definitions + +digraph G { +labelloc="t"; +label="map of yak collective IT infrastructure (work in progress)"; + +#components + + +calandar WEBSITE[label="google\ncalandar"][URL="https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; +docs WEBSITE[label="google docs"][URL="https://roamresearch.com/#/app/ArtOfGig/page/UxescKnLz"]; +forms WEBSITE[label="registration\nform"][URL="https://roamresearch.com/#/app/ArtOfGig/page/jndSmXO3Q"]; +ifttt WEBSERVICE[label="IFTTT"][URL="https://roamresearch.com/#/app/ArtOfGig/page/1jMx-b5Fs"]; +dns WEBSERVICE[label="Namecheap"][URL="https://roamresearch.com/#/app/ArtOfGig/page/SrB_NQUiU"]; +github WEBSERVICE[label="GitHub"][URL="https://roamresearch.com/#/app/ArtOfGig/page/1PVNV7Ell"]; +netlify WEBSERVICE[label="Netlify"][URL="https://roamresearch.com/#/app/ArtOfGig/page/SVNduLQJn"]; +jekyll TOOL[label="Jekyll"][URL="https://roamresearch.com/#/app/ArtOfGig/page/fF35dWNYl"]; +carl WEBSERVICE[label="Carl"][URL="https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"]; + +discord WEBSITE[label="Discord"][URL="https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; +twitter WEBSERVICE[label="Twitter"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; + +welcomer TOOL[label="welcome bot"][URL="https://roamresearch.com/#/app/ArtOfGig/page/zXjWI-iSj"]; +yakyak TOOL[label="yakyak carl-bot"][URL="https://roamresearch.com/#/app/ArtOfGig/page/Wr8zsoGZ5"]; + +#the website +subgraph cluster_4 { + labelloc="t"; + label="website functionality"; + website WEBSITE[label="Yakcollective.org"][URL="https://roamresearch.com/#/app/ArtOfGig/page/h0Wx539Oq"]; + netlifyrt WEBSERVICE[label="netlify\nbackending"][URL="https://roamresearch.com/#/app/ArtOfGig/page/-DyEtjJie"]; + +} + +#things i do not know how to connect +subgraph cluster_0 { + labelloc="t"; + label="not sure what connection is (yet)"; + + zapier WEBSERVICE[label="Zapier"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; + +} + +#things not connected by IT with rest of infrastructure and managed seperatly and not used by members +subgraph cluster_1 { + labelloc="t"; + label="unconnected and manually managed\nnot by members"; + + gmail WEBSERVICE[label="yakcollective.org\n@gmail.com"][URL="https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"]; + facebook WEBSERVICE[label="Facebook"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; + linkedin WEBSERVICE[label="Linkedin"][URL="https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; +} + +#things in process of connection with rest of infrastructure +subgraph cluster_2 { + labelloc="t"; + label="in next version or two should be connected"; + + knack WEBSITE[label="Knack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FDjmLsCeR"]; + roam WEBSITE[label="Roam"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; + yak_scraper TOOL[label="yak_scraper"][URL="https://roamresearch.com/#/app/ArtOfGig/page/-OUopK-ql"] + +} + +#things that represent user generated data on web +subgraph cluster_3 { + labelloc="t"; + label="members' web presence"; + + substack USERSITE[label="Substack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/kMaCo6Xc-"]; + blogs USERSITE[label="member\nblogs"][URL="https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; + +} + +#links +website->ifttt->twitter DATA[label="feedupdates"][URL="https://roamresearch.com/#/app/ArtOfGig/page/vb-TjfidT"]; +{substack, blogs}->netlifyrt DATA[label="member-generated\nweb-content"][URL="https://roamresearch.com/#/app/ArtOfGig/page/gg1Rhn-k9"]; +netlifyrt->{github,discord} FUNCTION[label="create_post"][URL="https://roamresearch.com/#/app/ArtOfGig/page/MX6h90kc6"]; +dns->netlify DATA[label="CNAME"][URL="https://roamresearch.com/#/app/ArtOfGig/page/oj_yd_nJQ"]; +website->forms DATA[label="minimal\nuser data"]; +forms->discord FUNCTION[label="invite"]; +discord->welcomer DATA[label="newby"]; +welcomer->discord FUNCTION[label="welcoming"]; +discord->yakyak DATA[label="newby"]; +yakyak->discord FUNCTION[label="prune"]; + +welcomer->discord FUNCTION[label="welcome\nnew user"]; +docs->website FUNCTION[label="host\nprojects"]; +calandar->carl FUNCTION[label="calandar yak"][URL="https://roamresearch.com/#/app/ArtOfGig/page/HB6pYl8y1"]; +carl->discord DATA[label="reminders"]; +github->jekyll DATA[label="md files\nand others"][URL="https://roamresearch.com/#/app/ArtOfGig/page/mUmau331V"]; +jekyll->netlify DATA [label="Rendered\nwebsite"][]URL="https://roamresearch.com/#/app/ArtOfGig/page/olV_kr5d8"; +netlify->website DATA[label="Deploy"][URL="https://roamresearch.com/#/app/ArtOfGig/page/aNm73M_3p"]; +} diff --git a/index.html b/index.html index c2bebab..f1c0642 100644 --- a/index.html +++ b/index.html @@ -13,18 +13,9 @@

Yak Documentation tool

-

A graphic layout where each text item is clickable and leads to a descriptive file. hosted on github pages.

+

A graphic layout where each text item is clickable and leads to a descriptive page in Roam.

use github editor to edit layout of file editme.dot Refresh after!

- - -Make text files editable: - - - -
From 2172f274bcc00b9937c1007b2dfe7464ed9999e3 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Mon, 21 Sep 2020 20:33:26 -0600 Subject: [PATCH 02/21] Remove unused code --- index.html | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/index.html b/index.html index f1c0642..bc7b075 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,6 @@ - @@ -110,22 +109,12 @@ }); return x; } -function subl_dot(x) //put in correct link adressess. put in ONLY the name of the file. draw-dot will add "click" capture the click, etc. -{ - let a=RegExp('%%([a-zA-Z0-9_\/ -]+)%%','g') - //console.log(a); - x=x.replace(a,'[URL="$1"]'); -return x; -} -stam=""; fetch("/editme.dot"). then(resp=>resp.text()). then(data=>{ - //stam=data; //console.log(data); subd=subd_dot(data); //console.log(subd); - subl=subl_dot(subd); draw_dot_file(subl); }). catch(console.log("maybe some problem with reading dot file from github")); From 971b8b24ec0f6d6a05b1f2f9a4f09baa7e750ebe Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Thu, 24 Sep 2020 22:36:36 -0600 Subject: [PATCH 03/21] Updated diagram + offline build instructions --- README.md | 23 +- editme.dot | 281 +++++++++++++++--------- editme.svg | 583 +++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 3 +- replacings.sed | 6 + 5 files changed, 784 insertions(+), 112 deletions(-) create mode 100644 editme.svg create mode 100644 replacings.sed diff --git a/README.md b/README.md index ea5ca0e..1685865 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,21 @@ -# tilnow.github.io -prototype documentation tool for yakcollective IT infrastructure +# Yak Collective IT Infrastructure Map + +Prototype documentation tool for [Yak Collective](https://yakcollective.org) [IT Infrastructure](https://roamresearch.com/#/app/ArtOfGig/page/6fhTlx1p_). + +## Development + +Most (all?) browsers restrict how JavaScript can access `file://` URLs, even for HTML files opened directly from the file system. For this reason, you'll need to fire up a local web server to work on `index.html`, etc. Python 3 makes this easy: + +```bash +python3 -m http.server 8080 +``` + +Then go to to view the infrastrucutre diagram. Reload after making any changes. + +## Build + +To generate an SVG for Roam, use: + +```bash +sed -E -f replacings.sed editme.dot | dot -Tsvg > editme.svg +``` diff --git a/editme.dot b/editme.dot index ff58d81..71f7c18 100644 --- a/editme.dot +++ b/editme.dot @@ -1,109 +1,174 @@ -#a dot file which includes all our IT infrastructure -#unlike standard dot, we have some macros here -# %%XXX%%% means there is a file XXX.md with explanation. all items AND links should have one, so please create -# some keywords in uppercase, like TOOL, DATA, WEBSERVICE were defined in replacings.sed and now down below and contain formatting instructions -# all other dot thingees apply -# rendering is using plain dot - - -#{ #start substitution definitions no spaces before name. hash (#) after name. comment optional -#WEBSITE#[shape=doublecircle][color=green] #a site we expect _members_ (or at least non-sys admins) to use the site-provided ui sometimes -#WEBSERVICE#[shape=egg][color=green] #mainly used to transform data. of course, somebody needs to use the ui at some point -#USERSITE#[shape=triangle][color=green] #something individual members deal with indepdnent of YC -#TOOL#[shape=rectangle][color=blue] # a software tool -#DATA#[color=red] #data -#FUNCTION#[color=black] #a function -#} #end substitution definitions - -digraph G { -labelloc="t"; -label="map of yak collective IT infrastructure (work in progress)"; - -#components - - -calandar WEBSITE[label="google\ncalandar"][URL="https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; -docs WEBSITE[label="google docs"][URL="https://roamresearch.com/#/app/ArtOfGig/page/UxescKnLz"]; -forms WEBSITE[label="registration\nform"][URL="https://roamresearch.com/#/app/ArtOfGig/page/jndSmXO3Q"]; -ifttt WEBSERVICE[label="IFTTT"][URL="https://roamresearch.com/#/app/ArtOfGig/page/1jMx-b5Fs"]; -dns WEBSERVICE[label="Namecheap"][URL="https://roamresearch.com/#/app/ArtOfGig/page/SrB_NQUiU"]; -github WEBSERVICE[label="GitHub"][URL="https://roamresearch.com/#/app/ArtOfGig/page/1PVNV7Ell"]; -netlify WEBSERVICE[label="Netlify"][URL="https://roamresearch.com/#/app/ArtOfGig/page/SVNduLQJn"]; -jekyll TOOL[label="Jekyll"][URL="https://roamresearch.com/#/app/ArtOfGig/page/fF35dWNYl"]; -carl WEBSERVICE[label="Carl"][URL="https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"]; - -discord WEBSITE[label="Discord"][URL="https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; -twitter WEBSERVICE[label="Twitter"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; - -welcomer TOOL[label="welcome bot"][URL="https://roamresearch.com/#/app/ArtOfGig/page/zXjWI-iSj"]; -yakyak TOOL[label="yakyak carl-bot"][URL="https://roamresearch.com/#/app/ArtOfGig/page/Wr8zsoGZ5"]; - -#the website -subgraph cluster_4 { - labelloc="t"; - label="website functionality"; - website WEBSITE[label="Yakcollective.org"][URL="https://roamresearch.com/#/app/ArtOfGig/page/h0Wx539Oq"]; - netlifyrt WEBSERVICE[label="netlify\nbackending"][URL="https://roamresearch.com/#/app/ArtOfGig/page/-DyEtjJie"]; - -} - -#things i do not know how to connect -subgraph cluster_0 { - labelloc="t"; - label="not sure what connection is (yet)"; - - zapier WEBSERVICE[label="Zapier"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; - -} - -#things not connected by IT with rest of infrastructure and managed seperatly and not used by members -subgraph cluster_1 { - labelloc="t"; - label="unconnected and manually managed\nnot by members"; - - gmail WEBSERVICE[label="yakcollective.org\n@gmail.com"][URL="https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"]; - facebook WEBSERVICE[label="Facebook"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; - linkedin WEBSERVICE[label="Linkedin"][URL="https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; -} - -#things in process of connection with rest of infrastructure -subgraph cluster_2 { - labelloc="t"; - label="in next version or two should be connected"; - - knack WEBSITE[label="Knack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FDjmLsCeR"]; - roam WEBSITE[label="Roam"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; - yak_scraper TOOL[label="yak_scraper"][URL="https://roamresearch.com/#/app/ArtOfGig/page/-OUopK-ql"] - -} - -#things that represent user generated data on web -subgraph cluster_3 { - labelloc="t"; - label="members' web presence"; - - substack USERSITE[label="Substack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/kMaCo6Xc-"]; - blogs USERSITE[label="member\nblogs"][URL="https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; - -} - -#links -website->ifttt->twitter DATA[label="feedupdates"][URL="https://roamresearch.com/#/app/ArtOfGig/page/vb-TjfidT"]; -{substack, blogs}->netlifyrt DATA[label="member-generated\nweb-content"][URL="https://roamresearch.com/#/app/ArtOfGig/page/gg1Rhn-k9"]; -netlifyrt->{github,discord} FUNCTION[label="create_post"][URL="https://roamresearch.com/#/app/ArtOfGig/page/MX6h90kc6"]; -dns->netlify DATA[label="CNAME"][URL="https://roamresearch.com/#/app/ArtOfGig/page/oj_yd_nJQ"]; -website->forms DATA[label="minimal\nuser data"]; -forms->discord FUNCTION[label="invite"]; -discord->welcomer DATA[label="newby"]; -welcomer->discord FUNCTION[label="welcoming"]; -discord->yakyak DATA[label="newby"]; -yakyak->discord FUNCTION[label="prune"]; - -welcomer->discord FUNCTION[label="welcome\nnew user"]; -docs->website FUNCTION[label="host\nprojects"]; -calandar->carl FUNCTION[label="calandar yak"][URL="https://roamresearch.com/#/app/ArtOfGig/page/HB6pYl8y1"]; -carl->discord DATA[label="reminders"]; -github->jekyll DATA[label="md files\nand others"][URL="https://roamresearch.com/#/app/ArtOfGig/page/mUmau331V"]; -jekyll->netlify DATA [label="Rendered\nwebsite"][]URL="https://roamresearch.com/#/app/ArtOfGig/page/olV_kr5d8"; -netlify->website DATA[label="Deploy"][URL="https://roamresearch.com/#/app/ArtOfGig/page/aNm73M_3p"]; +# A dot file which includes all (known) Yak Collective IT +# infrastructure. +# +# Unlike standard Graphviz dot, we define some macros here that get +# replaced pre-render. (Substitution block begins with a +# hash-open-curly-brace and ends with a hash-close-curly-brace. +# Macros are defined as # + macro name + # + substitution. Anything +# after the first space is considered a comment.) +# +#{ +#STATIC_DATA#[shape=doublecircle][color=green] # Website or service that functions as a (relatively) static data source/destination +#EXTERNAL_SERVICE#[shape=egg][color=green] # Externally-facing web service used by all YC members/participants (and sometimes others) +#INTERNAL_SERVICE#[shape=egg][color=blue] # Internally-facing web service used by a few YC members (sometimes not accessible at all) +#APPLET#[shape=rectangle][color=blue] # A function, service-specific applet, or internal tool; contained by and run by some service +#USER_DATA#[color=red] # Manual data flow (someone creates an account, reviews a list and takes action, etc.) +#AUTO_DATA#[color=black] # Automatic data flows (service takes action based on a timer, webhook, etc.) +#} +# +# (The above lines need to be kept in sync with the corresponding lines in `replacings.sed`.) +# +# Otherwise, all other dot thingees apply. + +digraph yak_infrastructure { + labelloc="t"; + label="Yak Collective IT Infrastructure"; + labelURL="https://roamresearch.com/#/app/ArtOfGig/page/6fhTlx1p_"; + + # Components + # + subgraph cluster_google { + labelloc="t"; + label="Google"; + color="gray"; + + subgraph cluster_robot { + labelloc="t"; + label="Yak Collective Robot"; + labelURL="https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"; + color="gray"; + + google_calendar STATIC_DATA[label="Google\nCalendar"][URL="https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; + registration_form STATIC_DATA[label="Registration\nForm"][URL="https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; + } + + google_analytics INTERNAL_SERVICE[label="Google\nAnalytics"][URL="https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; + reboot_deck STATIC_DATA[label="\"Don't Waste the\nReboot\" deck"][URL="https://roamresearch.com/#/app/ArtOfGig/page/s7km8fEQp"]; + home_deck STATIC_DATA[label="\"The New Old\nHome\" deck"][URL="https://roamresearch.com/#/app/ArtOfGig/page/sGxc8YzrD"]; + } + + zapier INTERNAL_SERVICE[label="Zapier"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; + + subgraph cluster_carl { + labelloc="t"; + label="Carl"; + labelURL="https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"; + color="gray"; + + calendar_yak APPLET[label="calendar_yak"][URL="https://roamresearch.com/#/app/ArtOfGig/page/4lz1jh2sn"]; + welcome_bot APPLET[label="welcome_bot"][URL="https://roamresearch.com/#/app/ArtOfGig/page/S_Xkw1vVi"]; + yakyak APPLET[label="yakyak"][URL="https://roamresearch.com/#/app/ArtOfGig/page/Q1LoZ_dE4"]; + } + + discord EXTERNAL_SERVICE[label="Discord"][URL="https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; + + substack EXTERNAL_SERVICE[label="Substack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/kMaCo6Xc-"]; + + member_feeds STATIC_DATA[label="Member RSS\nFeeds"][URL="https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; + + twitter EXTERNAL_SERVICE[label="Twitter"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; + facebook EXTERNAL_SERVICE[label="Facebook"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; + linkedin EXTERNAL_SERVICE[label="LinkedIn"][URL="https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; + + subgraph cluster_unused { + labelloc="t"; + label="Unused"; + color="gray"; + + glitch INTERNAL_SERVICE[label="Glitch"][URL="https://roamresearch.com/#/app/ArtOfGig/page/bTxU0ABQS"]; + } + + subgraph cluster_ifttt { + labelloc="t"; + label="IFTTT"; + labelURL="https://roamresearch.com/#/app/ArtOfGig/page/1jMx-b5Fs"; + color="gray"; + + rss_applet APPLET[label="create-post\nApplets"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ucCeiIsih"]; + twitter_applets APPLET[label="Twitter\nApplets"][URL="https://roamresearch.com/#/app/ArtOfGig/page/j7DInC9sg"]; + netlify_applet APPLET[label="Netlify Build\nHook Applet"][URL="https://roamresearch.com/#/app/ArtOfGig/page/EWP06EjZH"]; + } + + github INTERNAL_SERVICE[label="GitHub"][URL="https://roamresearch.com/#/app/ArtOfGig/page/1PVNV7Ell"]; + + subgraph cluster_netlify { + labelloc="t"; + label="Netlify"; + labelURL="https://roamresearch.com/#/app/ArtOfGig/page/SVNduLQJn"; + color="gray"; + + netlify_ci INTERNAL_SERVICE[label="Netlify Continuous\nIntegration"][URL="https://roamresearch.com/#/app/ArtOfGig/page/lfZqzDmtI"]; + jekyll APPLET[label="Jekyll"][URL="https://roamresearch.com/#/app/ArtOfGig/page/fF35dWNYl"]; + netlify_cdn INTERNAL_SERVICE[label="Netlify\nCDN"][URL="https://roamresearch.com/#/app/ArtOfGig/page/R-E2CDAe2"]; + + subgraph cluster_cloudfront { + labelloc="t"; + label="Amazon Cloudfront"; + color="gray"; + + website STATIC_DATA[label="Yak Collective\nWebsite"][URL="https://roamresearch.com/#/app/ArtOfGig/page/h0Wx539Oq"]; + featured_yak STATIC_DATA[label="\"Featured Yak\"\nRSS Feed"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ZzuH6YDFq"]; + } + + subgraph cluster_lambda { + labelloc="t"; + label="Amazon Lambda"; + color="gray"; + + create_post APPLET[label="create-post"][URL="https://roamresearch.com/#/app/ArtOfGig/page/wDK81GyfO"]; + } + } + + namecheap INTERNAL_SERVICE[label="Namecheap"][URL="https://roamresearch.com/#/app/ArtOfGig/page/SrB_NQUiU"]; + knack EXTERNAL_SERVICE[label="Knack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FDjmLsCeR"]; + roam EXTERNAL_SERVICE[label="Roam"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; + + # Hidden user interaction nodes + # + visitor [shape=plaintext][label=""]; + developer [shape=plaintext][label=""]; + + # Website data flows to Google + # + website->google_analytics AUTO_DATA[label="Visitor analytics"]; + website->{reboot_deck,home_deck} USER_DATA[label="Google Slides / PDF"]; + + # Member registration flow + # + visitor->website USER_DATA[label="Website visitor"]; + website->registration_form USER_DATA[label="Sign up form\n(minimal data)"]; + registration_form->discord USER_DATA[label="Invite link"]; + discord->{welcome_bot,yakyak} AUTO_DATA[label="New user\nnotification / data"]; + welcome_bot->discord AUTO_DATA[label="Welcome message\nseries"]; + yakyak->discord AUTO_DATA[label="Prune inactive\nusers"]; + + # Building the website + # + developer->github USER_DATA[label="Git commit"]; + github->netlify_ci AUTO_DATA[label="Repo contents pushed\non commit"]; + netlify_applet->netlify_ci AUTO_DATA[label="Trigger rebuild\nevery 24 hours"]; + netlify_ci->jekyll AUTO_DATA[label="Build website"]; + jekyll->netlify_cdn AUTO_DATA[label="Optimize & deploy\nwebsite files"]; + namecheap->netlify_cdn AUTO_DATA[label="DNS information"]; + netlify_cdn->{website,featured_yak} AUTO_DATA[label="Push to Amazon\nCloudfront"]; + netlify_cdn->create_post AUTO_DATA[label="Create Amazon\nLambda function"]; + + # Various RSS feeds to the website/Discord + # + {member_feeds,substack}->rss_applet USER_DATA[label="Pulled\nby IFTTT"]; + rss_applet->create_post AUTO_DATA[label="RSS post data\nto webhook"]; + create_post->github AUTO_DATA[label="Commit new\nmember post"]; + create_post->discord AUTO_DATA[label="Post in\n#yaktalk-content"]; + + # Various RSS feeds to Twitter/Discord + # + {member_feeds,substack}->twitter_applets USER_DATA[label="Pulled\nby IFTTT"]; + featured_yak->twitter_applets AUTO_DATA[label="Pulled\nby IFTTT"]; + twitter_applets->twitter AUTO_DATA[label="Tweet about\nnew content"]; + + # Google Calendar -> Twitter/Discord + # + google_calendar->zapier AUTO_DATA[label="Pulled by\nZapier"]; + zapier->discord AUTO_DATA[label="Post in\n#events"]; + zapier->twitter AUTO_DATA[label="Tweet about\nnew content"]; } diff --git a/editme.svg b/editme.svg new file mode 100644 index 0000000..7b0aea9 --- /dev/null +++ b/editme.svg @@ -0,0 +1,583 @@ + + + + + + +yak_infrastructure + +Yak Collective IT Infrastructure + +cluster_google + +Google + + +cluster_robot + +Yak Collective Robot + + +cluster_carl + +Carl + + +cluster_unused + +Unused + + +cluster_ifttt + +IFTTT + + +cluster_netlify + +Netlify + + +cluster_cloudfront + +Amazon Cloudfront + + +cluster_lambda + +Amazon Lambda + + + +google_calendar + + + +Google +Calendar + + + + + +zapier + + +Zapier + + + + + +google_calendar->zapier + + +Pulled by +Zapier + + + +registration_form + + + +Registration +Form + + + + + +discord + + +Discord + + + + + +registration_form->discord + + +Invite link + + + +google_analytics + + +Google +Analytics + + + + + +reboot_deck + + + +"Don't Waste the +Reboot" deck + + + + + +home_deck + + + +"The New Old +Home" deck + + + + + +zapier->discord + + +Post in +#events + + + +twitter + + +Twitter + + + + + +zapier->twitter + + +Tweet about +new content + + + +calendar_yak + + +calendar_yak + + + + + +welcome_bot + + +welcome_bot + + + + + +welcome_bot->discord + + +Welcome message +series + + + +yakyak + + +yakyak + + + + + +yakyak->discord + + +Prune inactive +users + + + +discord->welcome_bot + + +New user +notification / data + + + +discord->yakyak + + +New user +notification / data + + + +substack + + +Substack + + + + + +rss_applet + + +create-post +Applets + + + + + +substack->rss_applet + + +Pulled +by IFTTT + + + +twitter_applets + + +Twitter +Applets + + + + + +substack->twitter_applets + + +Pulled +by IFTTT + + + +member_feeds + + + +Member RSS +Feeds + + + + + +member_feeds->rss_applet + + +Pulled +by IFTTT + + + +member_feeds->twitter_applets + + +Pulled +by IFTTT + + + +facebook + + +Facebook + + + + + +linkedin + + +LinkedIn + + + + + +glitch + + +Glitch + + + + + +create_post + + +create-post + + + + + +rss_applet->create_post + + +RSS post data +to webhook + + + +twitter_applets->twitter + + +Tweet about +new content + + + +netlify_applet + + +Netlify Build +Hook Applet + + + + + +netlify_ci + + +Netlify Continuous +Integration + + + + + +netlify_applet->netlify_ci + + +Trigger rebuild +every 24 hours + + + +github + + +GitHub + + + + + +github->netlify_ci + + +Repo contents pushed +on commit + + + +jekyll + + +Jekyll + + + + + +netlify_ci->jekyll + + +Build website + + + +netlify_cdn + + +Netlify +CDN + + + + + +jekyll->netlify_cdn + + +Optimize & deploy +website files + + + +website + + + +Yak Collective +Website + + + + + +netlify_cdn->website + + +Push to Amazon +Cloudfront + + + +featured_yak + + + +"Featured Yak" +RSS Feed + + + + + +netlify_cdn->featured_yak + + +Push to Amazon +Cloudfront + + + +netlify_cdn->create_post + + +Create Amazon +Lambda function + + + +website->registration_form + + +Sign up form +(minimal data) + + + +website->google_analytics + + +Visitor analytics + + + +website->reboot_deck + + +Google Slides / PDF + + + +website->home_deck + + +Google Slides / PDF + + + +featured_yak->twitter_applets + + +Pulled +by IFTTT + + + +create_post->discord + + +Post in +#yaktalk-content + + + +create_post->github + + +Commit new +member post + + + +namecheap + + +Namecheap + + + + + +namecheap->netlify_cdn + + +DNS information + + + +knack + + +Knack + + + + + +roam + + +Roam + + + + + +visitor + + + +visitor->website + + +Website visitor + + + +developer + + + +developer->github + + +Git commit + + + diff --git a/index.html b/index.html index bc7b075..9fffa7e 100644 --- a/index.html +++ b/index.html @@ -115,7 +115,7 @@ //console.log(data); subd=subd_dot(data); //console.log(subd); - draw_dot_file(subl); + draw_dot_file(subd); }). catch(console.log("maybe some problem with reading dot file from github")); @@ -129,4 +129,3 @@

Yak Documentation tool

- diff --git a/replacings.sed b/replacings.sed new file mode 100644 index 0000000..cdde568 --- /dev/null +++ b/replacings.sed @@ -0,0 +1,6 @@ +s/STATIC_DATA/[shape=doublecircle][color=green]/ # Website or service that functions as a (relatively) static data source/destination +s/EXTERNAL_SERVICE/[shape=egg][color=green]/ # Externally-facing web service used by all YC members/participants (and sometimes others) +s/INTERNAL_SERVICE/[shape=egg][color=blue]/ # Internally-facing web service used by a few YC members (sometimes not accessible at all) +s/APPLET/[shape=rectangle][color=blue]/ # A function, service-specific applet, or internal tool; contained by and run by some service +s/USER_DATA/[color=red]/ # Manual data flow (someone creates an account, reviews a list and takes action, etc.) +s/AUTO_DATA/[color=black]/ # Automatic data flows (service takes action based on a timer, webhook, etc.) From 46b44367a12704af933e40e203b1f4a8d76b2b74 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Fri, 25 Sep 2020 21:31:14 -0600 Subject: [PATCH 04/21] Remove Maier-isms --- .gitattributes | 2 - .github/workflows/main.yml | 25 ++++ README.md | 2 +- editme.dot | 174 -------------------------- index.html | 204 +++++++++++++------------------ infrastructure.dot | 159 ++++++++++++++++++++++++ editme.svg => infrastructure.svg | 0 macros.sed | 6 + replacings.sed | 6 - showdown.min.js.map | 1 - stam.js | 2 - 11 files changed, 276 insertions(+), 305 deletions(-) delete mode 100644 .gitattributes create mode 100644 .github/workflows/main.yml delete mode 100644 editme.dot create mode 100644 infrastructure.dot rename editme.svg => infrastructure.svg (100%) create mode 100644 macros.sed delete mode 100644 replacings.sed delete mode 100644 showdown.min.js.map delete mode 100644 stam.js diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..d40e984 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,25 @@ +name: Update SVG + +on: + push: + branches: + - master + +jobs: + update-svg: + runs-on: ubuntu-latest + name: Update SVG + timeout-minutes: 15 + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup dependencies + run: | + sudo apt-get install graphviz + - name: Create new SVG + run: | + sed -E -f macros.sed infrastructure.dot | dot -Tsvg > infrastructure.svg + - name: Commit changes + uses: elstudio/actions-js-build/commit@v3 + with: + commitMessage: Updated infrastructure diagram SVG diff --git a/README.md b/README.md index 1685865..c24cf93 100644 --- a/README.md +++ b/README.md @@ -17,5 +17,5 @@ Then go to to view the infrastrucutre diagra To generate an SVG for Roam, use: ```bash -sed -E -f replacings.sed editme.dot | dot -Tsvg > editme.svg +sed -E -f macros.sed infrastructure.dot | dot -Tsvg > infrastructure.svg ``` diff --git a/editme.dot b/editme.dot deleted file mode 100644 index 71f7c18..0000000 --- a/editme.dot +++ /dev/null @@ -1,174 +0,0 @@ -# A dot file which includes all (known) Yak Collective IT -# infrastructure. -# -# Unlike standard Graphviz dot, we define some macros here that get -# replaced pre-render. (Substitution block begins with a -# hash-open-curly-brace and ends with a hash-close-curly-brace. -# Macros are defined as # + macro name + # + substitution. Anything -# after the first space is considered a comment.) -# -#{ -#STATIC_DATA#[shape=doublecircle][color=green] # Website or service that functions as a (relatively) static data source/destination -#EXTERNAL_SERVICE#[shape=egg][color=green] # Externally-facing web service used by all YC members/participants (and sometimes others) -#INTERNAL_SERVICE#[shape=egg][color=blue] # Internally-facing web service used by a few YC members (sometimes not accessible at all) -#APPLET#[shape=rectangle][color=blue] # A function, service-specific applet, or internal tool; contained by and run by some service -#USER_DATA#[color=red] # Manual data flow (someone creates an account, reviews a list and takes action, etc.) -#AUTO_DATA#[color=black] # Automatic data flows (service takes action based on a timer, webhook, etc.) -#} -# -# (The above lines need to be kept in sync with the corresponding lines in `replacings.sed`.) -# -# Otherwise, all other dot thingees apply. - -digraph yak_infrastructure { - labelloc="t"; - label="Yak Collective IT Infrastructure"; - labelURL="https://roamresearch.com/#/app/ArtOfGig/page/6fhTlx1p_"; - - # Components - # - subgraph cluster_google { - labelloc="t"; - label="Google"; - color="gray"; - - subgraph cluster_robot { - labelloc="t"; - label="Yak Collective Robot"; - labelURL="https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"; - color="gray"; - - google_calendar STATIC_DATA[label="Google\nCalendar"][URL="https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; - registration_form STATIC_DATA[label="Registration\nForm"][URL="https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; - } - - google_analytics INTERNAL_SERVICE[label="Google\nAnalytics"][URL="https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; - reboot_deck STATIC_DATA[label="\"Don't Waste the\nReboot\" deck"][URL="https://roamresearch.com/#/app/ArtOfGig/page/s7km8fEQp"]; - home_deck STATIC_DATA[label="\"The New Old\nHome\" deck"][URL="https://roamresearch.com/#/app/ArtOfGig/page/sGxc8YzrD"]; - } - - zapier INTERNAL_SERVICE[label="Zapier"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; - - subgraph cluster_carl { - labelloc="t"; - label="Carl"; - labelURL="https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"; - color="gray"; - - calendar_yak APPLET[label="calendar_yak"][URL="https://roamresearch.com/#/app/ArtOfGig/page/4lz1jh2sn"]; - welcome_bot APPLET[label="welcome_bot"][URL="https://roamresearch.com/#/app/ArtOfGig/page/S_Xkw1vVi"]; - yakyak APPLET[label="yakyak"][URL="https://roamresearch.com/#/app/ArtOfGig/page/Q1LoZ_dE4"]; - } - - discord EXTERNAL_SERVICE[label="Discord"][URL="https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; - - substack EXTERNAL_SERVICE[label="Substack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/kMaCo6Xc-"]; - - member_feeds STATIC_DATA[label="Member RSS\nFeeds"][URL="https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; - - twitter EXTERNAL_SERVICE[label="Twitter"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; - facebook EXTERNAL_SERVICE[label="Facebook"][URL="https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; - linkedin EXTERNAL_SERVICE[label="LinkedIn"][URL="https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; - - subgraph cluster_unused { - labelloc="t"; - label="Unused"; - color="gray"; - - glitch INTERNAL_SERVICE[label="Glitch"][URL="https://roamresearch.com/#/app/ArtOfGig/page/bTxU0ABQS"]; - } - - subgraph cluster_ifttt { - labelloc="t"; - label="IFTTT"; - labelURL="https://roamresearch.com/#/app/ArtOfGig/page/1jMx-b5Fs"; - color="gray"; - - rss_applet APPLET[label="create-post\nApplets"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ucCeiIsih"]; - twitter_applets APPLET[label="Twitter\nApplets"][URL="https://roamresearch.com/#/app/ArtOfGig/page/j7DInC9sg"]; - netlify_applet APPLET[label="Netlify Build\nHook Applet"][URL="https://roamresearch.com/#/app/ArtOfGig/page/EWP06EjZH"]; - } - - github INTERNAL_SERVICE[label="GitHub"][URL="https://roamresearch.com/#/app/ArtOfGig/page/1PVNV7Ell"]; - - subgraph cluster_netlify { - labelloc="t"; - label="Netlify"; - labelURL="https://roamresearch.com/#/app/ArtOfGig/page/SVNduLQJn"; - color="gray"; - - netlify_ci INTERNAL_SERVICE[label="Netlify Continuous\nIntegration"][URL="https://roamresearch.com/#/app/ArtOfGig/page/lfZqzDmtI"]; - jekyll APPLET[label="Jekyll"][URL="https://roamresearch.com/#/app/ArtOfGig/page/fF35dWNYl"]; - netlify_cdn INTERNAL_SERVICE[label="Netlify\nCDN"][URL="https://roamresearch.com/#/app/ArtOfGig/page/R-E2CDAe2"]; - - subgraph cluster_cloudfront { - labelloc="t"; - label="Amazon Cloudfront"; - color="gray"; - - website STATIC_DATA[label="Yak Collective\nWebsite"][URL="https://roamresearch.com/#/app/ArtOfGig/page/h0Wx539Oq"]; - featured_yak STATIC_DATA[label="\"Featured Yak\"\nRSS Feed"][URL="https://roamresearch.com/#/app/ArtOfGig/page/ZzuH6YDFq"]; - } - - subgraph cluster_lambda { - labelloc="t"; - label="Amazon Lambda"; - color="gray"; - - create_post APPLET[label="create-post"][URL="https://roamresearch.com/#/app/ArtOfGig/page/wDK81GyfO"]; - } - } - - namecheap INTERNAL_SERVICE[label="Namecheap"][URL="https://roamresearch.com/#/app/ArtOfGig/page/SrB_NQUiU"]; - knack EXTERNAL_SERVICE[label="Knack"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FDjmLsCeR"]; - roam EXTERNAL_SERVICE[label="Roam"][URL="https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; - - # Hidden user interaction nodes - # - visitor [shape=plaintext][label=""]; - developer [shape=plaintext][label=""]; - - # Website data flows to Google - # - website->google_analytics AUTO_DATA[label="Visitor analytics"]; - website->{reboot_deck,home_deck} USER_DATA[label="Google Slides / PDF"]; - - # Member registration flow - # - visitor->website USER_DATA[label="Website visitor"]; - website->registration_form USER_DATA[label="Sign up form\n(minimal data)"]; - registration_form->discord USER_DATA[label="Invite link"]; - discord->{welcome_bot,yakyak} AUTO_DATA[label="New user\nnotification / data"]; - welcome_bot->discord AUTO_DATA[label="Welcome message\nseries"]; - yakyak->discord AUTO_DATA[label="Prune inactive\nusers"]; - - # Building the website - # - developer->github USER_DATA[label="Git commit"]; - github->netlify_ci AUTO_DATA[label="Repo contents pushed\non commit"]; - netlify_applet->netlify_ci AUTO_DATA[label="Trigger rebuild\nevery 24 hours"]; - netlify_ci->jekyll AUTO_DATA[label="Build website"]; - jekyll->netlify_cdn AUTO_DATA[label="Optimize & deploy\nwebsite files"]; - namecheap->netlify_cdn AUTO_DATA[label="DNS information"]; - netlify_cdn->{website,featured_yak} AUTO_DATA[label="Push to Amazon\nCloudfront"]; - netlify_cdn->create_post AUTO_DATA[label="Create Amazon\nLambda function"]; - - # Various RSS feeds to the website/Discord - # - {member_feeds,substack}->rss_applet USER_DATA[label="Pulled\nby IFTTT"]; - rss_applet->create_post AUTO_DATA[label="RSS post data\nto webhook"]; - create_post->github AUTO_DATA[label="Commit new\nmember post"]; - create_post->discord AUTO_DATA[label="Post in\n#yaktalk-content"]; - - # Various RSS feeds to Twitter/Discord - # - {member_feeds,substack}->twitter_applets USER_DATA[label="Pulled\nby IFTTT"]; - featured_yak->twitter_applets AUTO_DATA[label="Pulled\nby IFTTT"]; - twitter_applets->twitter AUTO_DATA[label="Tweet about\nnew content"]; - - # Google Calendar -> Twitter/Discord - # - google_calendar->zapier AUTO_DATA[label="Pulled by\nZapier"]; - zapier->discord AUTO_DATA[label="Post in\n#events"]; - zapier->twitter AUTO_DATA[label="Tweet about\nnew content"]; -} diff --git a/index.html b/index.html index 9fffa7e..490eb00 100644 --- a/index.html +++ b/index.html @@ -1,32 +1,16 @@ - + sessionStorage.setItem("first", "NO"); - - - - - - - - +Uses Graphviz, Viz.js, showdown, Expat, zlib, Emscripten, with copyright notices in the source file for Eclipse, MIT, Zlib.`); + } + + // Take dotData and convert it to an SVG. Equivalent to the + // command: + // + // dot -Tsvg infrastructure.dot + // + function dotToSvg(dotData) { + var viz = new Viz(); + + viz.renderSVGElement(dotData) + .then(function (currentElement) { + anchorTags = currentElement.getElementsByTagName("a"); + anchorCount = anchorTags.length; + for (i = anchorCount - 1; i >= 0 ; i--) { + anchorTag = anchorTags[i]; + xlinkHref = anchorTag.getAttribute("xlink:href"); + if (!xlinkHref) continue; // Not a SVG link element + var newG = document.createElementNS("http://www.w3.org/2000/svg", "g"); + newG.setAttribute("onclick", "window.open('" + xlinkHref + "')"); + xlinkTitle = anchorTag.getAttribute("xlink:title"); + newG.setAttribute("xlink:title", xlinkTitle); + anchorChildren = anchorTag.childNodes; + for (j = anchorChildren.length - 1; j >= 0; j--) { + newG.appendChild(anchorChildren[j]); + }; + anchorTag.parentNode.appendChild(newG); + anchorTag.parentNode.removeChild(anchorTag); + } + + var currentContainer = document.getElementById("svgContainer"); + currentContainer.removeChild(currentContainer.lastChild); + currentContainer.appendChild(currentElement); + }) + .catch(error => { + viz = new Viz(); // Create a new Viz instance (see caveats page for more info) + console.log(error); + console.log(viz); + }); + } + + // Loop through macroData, splitting out the search and replace + // components of each sed expression, and then apply the + // specified replacement to dotData. Then, return the modified + // version of dotData. + // + // This essentially replicates the command: + // + // sed -E -f macros.sed infrastructure.dot + // + function expandMacros(dotData, macroData) { + macroData.split("\n").forEach(function (macroRegExp) { + if (macroRegExp.length === 0) return; + regExpParts = macroRegExp.split("/"); + let searchExp = RegExp(regExpParts[1], "g"); + replaceString = regExpParts[2]; + dotData=dotData.replace(searchExp, replaceString); + }); + return dotData; + } + + // Fetch `infrastructure.dot`, then fetch `macros.sed`, then + // process the whole thing. + // + fetch("infrastructure.dot") + .then(resp => resp.text()) + .then(dotData => { + fetch("macros.sed") + .then(resp => resp.text()) + .then(macroData => dotToSvg(expandMacros(dotData, macroData))); + }); + - -

Yak Documentation tool

- -

A graphic layout where each text item is clickable and leads to a descriptive page in Roam.

- -

use github editor to edit layout of file editme.dot Refresh after!

- -
+ +
diff --git a/infrastructure.dot b/infrastructure.dot new file mode 100644 index 0000000..ea14cb9 --- /dev/null +++ b/infrastructure.dot @@ -0,0 +1,159 @@ +# A dot file which includes all (known) Yak Collective IT +# infrastructure. +# +# Unlike standard Graphviz dot, we define some macros (in `macros.sed`) +# that need to be replaced pre-render. You should familiarize yourself +# with that file before editing this one. + +digraph yak_infrastructure { + labelloc = "t"; + label = "Yak Collective IT Infrastructure"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/6fhTlx1p_"; + + # Components + # + subgraph cluster_google { + labelloc = "t"; + label = "Google"; + color = "gray"; + + subgraph cluster_robot { + labelloc = "t"; + label = "Yak Collective Robot"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"; + color = "gray"; + + google_calendar STATIC_DATA [label = "Google\nCalendar"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; + registration_form STATIC_DATA [label = "Registration\nForm"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; + } + + google_analytics INTERNAL_SERVICE [label = "Google\nAnalytics"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; + reboot_deck STATIC_DATA [label = "\"Don't Waste the\nReboot\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/s7km8fEQp"]; + home_deck STATIC_DATA [label = "\"The New Old\nHome\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/sGxc8YzrD"]; + } + + zapier INTERNAL_SERVICE [label = "Zapier"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; + + subgraph cluster_carl { + labelloc = "t"; + label = "Carl"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"; + color = "gray"; + + calendar_yak APPLET [label = "calendar_yak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/4lz1jh2sn"]; + welcome_bot APPLET [label = "welcome_bot"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/S_Xkw1vVi"]; + yakyak APPLET [label = "yakyak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/Q1LoZ_dE4"]; + } + + discord EXTERNAL_SERVICE [label = "Discord"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; + + substack EXTERNAL_SERVICE [label = "Substack"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/kMaCo6Xc-"]; + + member_feeds STATIC_DATA [label = "Member RSS\nFeeds"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; + + twitter EXTERNAL_SERVICE [label = "Twitter"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; + facebook EXTERNAL_SERVICE [label = "Facebook"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; + linkedin EXTERNAL_SERVICE [label = "LinkedIn"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; + + subgraph cluster_unused { + labelloc = "t"; + label = "Unused"; + color = "gray"; + + glitch INTERNAL_SERVICE [label = "Glitch"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/bTxU0ABQS"]; + } + + subgraph cluster_ifttt { + labelloc = "t"; + label = "IFTTT"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/1jMx-b5Fs"; + color = "gray"; + + rss_applet APPLET [label = "create-post\nApplets"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ucCeiIsih"]; + twitter_applets APPLET [label = "Twitter\nApplets"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/j7DInC9sg"]; + netlify_applet APPLET [label = "Netlify Build\nHook Applet"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/EWP06EjZH"]; + } + + github INTERNAL_SERVICE [label = "GitHub"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/1PVNV7Ell"]; + + subgraph cluster_netlify { + labelloc = "t"; + label = "Netlify"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/SVNduLQJn"; + color = "gray"; + + netlify_ci INTERNAL_SERVICE [label = "Netlify Continuous\nIntegration"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/lfZqzDmtI"]; + jekyll APPLET [label = "Jekyll"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/fF35dWNYl"]; + netlify_cdn INTERNAL_SERVICE [label = "Netlify\nCDN"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/R-E2CDAe2"]; + + subgraph cluster_cloudfront { + labelloc = "t"; + label = "Amazon Cloudfront"; + color = "gray"; + + website STATIC_DATA [label = "Yak Collective\nWebsite"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/h0Wx539Oq"]; + featured_yak STATIC_DATA [label = "\"Featured Yak\"\nRSS Feed"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ZzuH6YDFq"]; + } + + subgraph cluster_lambda { + labelloc = "t"; + label = "Amazon Lambda"; + color = "gray"; + + create_post APPLET [label = "create-post"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wDK81GyfO"]; + } + } + + namecheap INTERNAL_SERVICE [label = "Namecheap"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/SrB_NQUiU"]; + knack EXTERNAL_SERVICE [label = "Knack"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/FDjmLsCeR"]; + roam EXTERNAL_SERVICE [label = "Roam"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; + + # Hidden user interaction nodes + # + visitor [shape = plaintext] [label = ""]; + developer [shape = plaintext] [label = ""]; + + # Website data flows to Google + # + website -> google_analytics AUTO_DATA [label = "Visitor analytics"]; + website -> {reboot_deck, home_deck} USER_DATA [label = "Google Slides / PDF"]; + + # Member registration flow + # + visitor -> website USER_DATA [label = "Website visitor"]; + website -> registration_form USER_DATA [label = "Sign up form\n(minimal data)"]; + registration_form -> discord USER_DATA [label = "Invite link"]; + discord -> {welcome_bot, yakyak} AUTO_DATA [label = "New user\nnotification / data"]; + welcome_bot -> discord AUTO_DATA [label = "Welcome message\nseries"]; + yakyak -> discord AUTO_DATA [label = "Prune inactive\nusers"]; + + # Building the website + # + developer -> github USER_DATA [label = "Git commit"]; + github -> netlify_ci AUTO_DATA [label = "Repo contents pushed\non commit"]; + netlify_applet -> netlify_ci AUTO_DATA [label = "Trigger rebuild\nevery 24 hours"]; + netlify_ci -> jekyll AUTO_DATA [label = "Build website"]; + jekyll -> netlify_cdn AUTO_DATA [label = "Optimize & deploy\nwebsite files"]; + namecheap -> netlify_cdn AUTO_DATA [label = "DNS information"]; + netlify_cdn -> {website, featured_yak} AUTO_DATA [label = "Push to Amazon\nCloudfront"]; + netlify_cdn -> create_post AUTO_DATA [label = "Create Amazon\nLambda function"]; + + # Various RSS feeds to the website/Discord + # + {member_feeds, substack} -> rss_applet USER_DATA [label = "Pulled\nby IFTTT"]; + rss_applet -> create_post AUTO_DATA [label = "RSS post data\nto webhook"]; + create_post -> github AUTO_DATA [label = "Commit new\nmember post"]; + create_post -> discord AUTO_DATA [label = "Post in\n#yaktalk-content"]; + + # Various RSS feeds to Twitter/Discord + # + {member_feeds, substack} -> twitter_applets USER_DATA [label = "Pulled\nby IFTTT"]; + featured_yak -> twitter_applets AUTO_DATA [label = "Pulled\nby IFTTT"]; + twitter_applets -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; + + # Google Calendar -> Twitter/Discord + # + google_calendar -> zapier AUTO_DATA [label = "Pulled by\nZapier"]; + zapier -> discord AUTO_DATA [label = "Post in\n#events"]; + zapier -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; +} diff --git a/editme.svg b/infrastructure.svg similarity index 100% rename from editme.svg rename to infrastructure.svg diff --git a/macros.sed b/macros.sed new file mode 100644 index 0000000..969bf98 --- /dev/null +++ b/macros.sed @@ -0,0 +1,6 @@ +s/STATIC_DATA/[shape = doublecircle] [color = green]/ # Website or service that functions as a (relatively) static data source/destination +s/EXTERNAL_SERVICE/[shape = egg] [color = green]/ # Externally-facing web service used by YC members/participants (and sometimes others) +s/INTERNAL_SERVICE/[shape = egg] [color = blue]/ # Internally-facing web service used by few YC members (sometimes not accessible at all) +s/APPLET/[shape = rectangle] [color = blue]/ # A function, service applet, or internal tool; contained by and run by some service +s/USER_DATA/[color = red]/ # Manual data flow (someone creates an account, reviews a list and takes action, etc.) +s/AUTO_DATA/[color = black]/ # Automatic data flows (service takes action based on a timer, webhook, etc.) diff --git a/replacings.sed b/replacings.sed deleted file mode 100644 index cdde568..0000000 --- a/replacings.sed +++ /dev/null @@ -1,6 +0,0 @@ -s/STATIC_DATA/[shape=doublecircle][color=green]/ # Website or service that functions as a (relatively) static data source/destination -s/EXTERNAL_SERVICE/[shape=egg][color=green]/ # Externally-facing web service used by all YC members/participants (and sometimes others) -s/INTERNAL_SERVICE/[shape=egg][color=blue]/ # Internally-facing web service used by a few YC members (sometimes not accessible at all) -s/APPLET/[shape=rectangle][color=blue]/ # A function, service-specific applet, or internal tool; contained by and run by some service -s/USER_DATA/[color=red]/ # Manual data flow (someone creates an account, reviews a list and takes action, etc.) -s/AUTO_DATA/[color=black]/ # Automatic data flows (service takes action based on a timer, webhook, etc.) diff --git a/showdown.min.js.map b/showdown.min.js.map deleted file mode 100644 index e4b0f79..0000000 --- a/showdown.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["showdown.js"],"names":["getDefaultOpts","simple","defaultOptions","omitExtraWLInCodeBlocks","defaultValue","describe","type","noHeaderId","prefixHeaderId","rawPrefixHeaderId","ghCompatibleHeaderId","rawHeaderId","headerLevelStart","parseImgDimensions","simplifiedAutoLink","excludeTrailingPunctuationFromURLs","literalMidWordUnderscores","literalMidWordAsterisks","strikethrough","tables","tablesHeaderId","ghCodeBlocks","tasklists","smoothLivePreview","smartIndentationFix","description","disableForced4SpacesIndentedSublists","simpleLineBreaks","requireSpaceBeforeHeadingText","ghMentions","ghMentionsLink","encodeEmails","openLinksInNewWindow","backslashEscapesHTMLTags","emoji","underline","completeHTMLDocument","metadata","splitAdjacentBlockquotes","JSON","parse","stringify","ret","opt","hasOwnProperty","validate","extension","name","errMsg","valid","error","showdown","helper","isArray","i","length","baseMsg","ext","isString","toLowerCase","isUndefined","listeners","filter","regex","ln","RegExp","replace","escapeCharactersCallback","wholeMatch","m1","charCodeAt","parsers","extensions","globalOptions","setFlavor","flavor","github","original","ghost","vanilla","allOn","options","allOptionsOn","setOption","key","value","this","getOption","getOptions","resetOptions","Error","preset","option","getFlavor","getFlavorOptions","getDefaultOptions","subParser","func","stdExtName","validExtension","getAllExtensions","removeExtension","resetExtensions","validateExtension","console","warn","a","String","isFunction","toString","call","Array","forEach","obj","callback","prop","s","escapeCharacters","text","charsToEscape","afterBackslash","regexString","unescapeHTMLEntities","txt","rgxFindMatchPos","str","left","right","flags","t","m","start","end","f","g","indexOf","x","l","pos","exec","test","lastIndex","index","match","push","matchRecursiveRegExp","matchPos","results","slice","replaceRecursiveRegExp","replacement","repStr","finalStr","lng","bits","join","regexIndexOf","fromIndex","substring","search","splitAtIndex","encodeEmailAddress","mail","encode","ch","Math","floor","random","r","padEnd","targetLength","padString","repeat","msg","alert","log","regexes","asteriskDashAndColon","emojis","+1","-1","100","1234","1st_place_medal","2nd_place_medal","3rd_place_medal","8ball","ab","abc","abcd","accept","aerial_tramway","airplane","alarm_clock","alembic","alien","ambulance","amphora","anchor","angel","anger","angry","anguished","ant","apple","aquarius","aries","arrow_backward","arrow_double_down","arrow_double_up","arrow_down","arrow_down_small","arrow_forward","arrow_heading_down","arrow_heading_up","arrow_left","arrow_lower_left","arrow_lower_right","arrow_right","arrow_right_hook","arrow_up","arrow_up_down","arrow_up_small","arrow_upper_left","arrow_upper_right","arrows_clockwise","arrows_counterclockwise","art","articulated_lorry","artificial_satellite","astonished","athletic_shoe","atm","atom_symbol","avocado","b","baby","baby_bottle","baby_chick","baby_symbol","back","bacon","badminton","baggage_claim","baguette_bread","balance_scale","balloon","ballot_box","ballot_box_with_check","bamboo","banana","bangbang","bank","bar_chart","barber","baseball","basketball","basketball_man","basketball_woman","bat","bath","bathtub","battery","beach_umbrella","bear","bed","bee","beer","beers","beetle","beginner","bell","bellhop_bell","bento","biking_man","bike","biking_woman","bikini","biohazard","bird","birthday","black_circle","black_flag","black_heart","black_joker","black_large_square","black_medium_small_square","black_medium_square","black_nib","black_small_square","black_square_button","blonde_man","blonde_woman","blossom","blowfish","blue_book","blue_car","blue_heart","blush","boar","boat","bomb","book","bookmark","bookmark_tabs","books","boom","boot","bouquet","bowing_man","bow_and_arrow","bowing_woman","bowling","boxing_glove","boy","bread","bride_with_veil","bridge_at_night","briefcase","broken_heart","bug","building_construction","bulb","bullettrain_front","bullettrain_side","burrito","bus","business_suit_levitating","busstop","bust_in_silhouette","busts_in_silhouette","butterfly","cactus","cake","calendar","call_me_hand","calling","camel","camera","camera_flash","camping","cancer","candle","candy","canoe","capital_abcd","capricorn","car","card_file_box","card_index","card_index_dividers","carousel_horse","carrot","cat","cat2","cd","chains","champagne","chart","chart_with_downwards_trend","chart_with_upwards_trend","checkered_flag","cheese","cherries","cherry_blossom","chestnut","chicken","children_crossing","chipmunk","chocolate_bar","christmas_tree","church","cinema","circus_tent","city_sunrise","city_sunset","cityscape","cl","clamp","clap","clapper","classical_building","clinking_glasses","clipboard","clock1","clock10","clock1030","clock11","clock1130","clock12","clock1230","clock130","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","closed_book","closed_lock_with_key","closed_umbrella","cloud","cloud_with_lightning","cloud_with_lightning_and_rain","cloud_with_rain","cloud_with_snow","clown_face","clubs","cocktail","coffee","coffin","cold_sweat","comet","computer","computer_mouse","confetti_ball","confounded","confused","congratulations","construction","construction_worker_man","construction_worker_woman","control_knobs","convenience_store","cookie","cool","policeman","copyright","corn","couch_and_lamp","couple","couple_with_heart_woman_man","couple_with_heart_man_man","couple_with_heart_woman_woman","couplekiss_man_man","couplekiss_man_woman","couplekiss_woman_woman","cow","cow2","cowboy_hat_face","crab","crayon","credit_card","crescent_moon","cricket","crocodile","croissant","crossed_fingers","crossed_flags","crossed_swords","crown","cry","crying_cat_face","crystal_ball","cucumber","cupid","curly_loop","currency_exchange","curry","custard","customs","cyclone","dagger","dancer","dancing_women","dancing_men","dango","dark_sunglasses","dart","dash","date","deciduous_tree","deer","department_store","derelict_house","desert","desert_island","desktop_computer","male_detective","diamond_shape_with_a_dot_inside","diamonds","disappointed","disappointed_relieved","dizzy","dizzy_face","do_not_litter","dog","dog2","dollar","dolls","dolphin","door","doughnut","dove","dragon","dragon_face","dress","dromedary_camel","drooling_face","droplet","drum","duck","dvd","e-mail","eagle","ear","ear_of_rice","earth_africa","earth_americas","earth_asia","egg","eggplant","eight_pointed_black_star","eight_spoked_asterisk","electric_plug","elephant","email","envelope_with_arrow","euro","european_castle","european_post_office","evergreen_tree","exclamation","expressionless","eye","eye_speech_bubble","eyeglasses","eyes","face_with_head_bandage","face_with_thermometer","fist_oncoming","factory","fallen_leaf","family_man_woman_boy","family_man_boy","family_man_boy_boy","family_man_girl","family_man_girl_boy","family_man_girl_girl","family_man_man_boy","family_man_man_boy_boy","family_man_man_girl","family_man_man_girl_boy","family_man_man_girl_girl","family_man_woman_boy_boy","family_man_woman_girl","family_man_woman_girl_boy","family_man_woman_girl_girl","family_woman_boy","family_woman_boy_boy","family_woman_girl","family_woman_girl_boy","family_woman_girl_girl","family_woman_woman_boy","family_woman_woman_boy_boy","family_woman_woman_girl","family_woman_woman_girl_boy","family_woman_woman_girl_girl","fast_forward","fax","fearful","feet","female_detective","ferris_wheel","ferry","field_hockey","file_cabinet","file_folder","film_projector","film_strip","fire","fire_engine","fireworks","first_quarter_moon","first_quarter_moon_with_face","fish","fish_cake","fishing_pole_and_fish","fist_raised","fist_left","fist_right","flashlight","fleur_de_lis","flight_arrival","flight_departure","floppy_disk","flower_playing_cards","flushed","fog","foggy","football","footprints","fork_and_knife","fountain","fountain_pen","four_leaf_clover","fox_face","framed_picture","free","fried_egg","fried_shrimp","fries","frog","frowning","frowning_face","frowning_man","frowning_woman","middle_finger","fuelpump","full_moon","full_moon_with_face","funeral_urn","game_die","gear","gem","gemini","gift","gift_heart","girl","globe_with_meridians","goal_net","goat","golf","golfing_man","golfing_woman","gorilla","grapes","green_apple","green_book","green_heart","green_salad","grey_exclamation","grey_question","grimacing","grin","grinning","guardsman","guardswoman","guitar","gun","haircut_woman","haircut_man","hamburger","hammer","hammer_and_pick","hammer_and_wrench","hamster","hand","handbag","handshake","hankey","hatched_chick","hatching_chick","headphones","hear_no_evil","heart","heart_decoration","heart_eyes","heart_eyes_cat","heartbeat","heartpulse","hearts","heavy_check_mark","heavy_division_sign","heavy_dollar_sign","heavy_heart_exclamation","heavy_minus_sign","heavy_multiplication_x","heavy_plus_sign","helicopter","herb","hibiscus","high_brightness","high_heel","hocho","hole","honey_pot","horse","horse_racing","hospital","hot_pepper","hotdog","hotel","hotsprings","hourglass","hourglass_flowing_sand","house","house_with_garden","houses","hugs","hushed","ice_cream","ice_hockey","ice_skate","icecream","id","ideograph_advantage","imp","inbox_tray","incoming_envelope","tipping_hand_woman","information_source","innocent","interrobang","iphone","izakaya_lantern","jack_o_lantern","japan","japanese_castle","japanese_goblin","japanese_ogre","jeans","joy","joy_cat","joystick","kaaba","keyboard","keycap_ten","kick_scooter","kimono","kiss","kissing","kissing_cat","kissing_closed_eyes","kissing_heart","kissing_smiling_eyes","kiwi_fruit","koala","koko","label","large_blue_circle","large_blue_diamond","large_orange_diamond","last_quarter_moon","last_quarter_moon_with_face","latin_cross","laughing","leaves","ledger","left_luggage","left_right_arrow","leftwards_arrow_with_hook","lemon","leo","leopard","level_slider","libra","light_rail","link","lion","lips","lipstick","lizard","lock","lock_with_ink_pen","lollipop","loop","loud_sound","loudspeaker","love_hotel","love_letter","low_brightness","lying_face","mag","mag_right","mahjong","mailbox","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","man","man_artist","man_astronaut","man_cartwheeling","man_cook","man_dancing","man_facepalming","man_factory_worker","man_farmer","man_firefighter","man_health_worker","man_in_tuxedo","man_judge","man_juggling","man_mechanic","man_office_worker","man_pilot","man_playing_handball","man_playing_water_polo","man_scientist","man_shrugging","man_singer","man_student","man_teacher","man_technologist","man_with_gua_pi_mao","man_with_turban","tangerine","mans_shoe","mantelpiece_clock","maple_leaf","martial_arts_uniform","mask","massage_woman","massage_man","meat_on_bone","medal_military","medal_sports","mega","melon","memo","men_wrestling","menorah","mens","metal","metro","microphone","microscope","milk_glass","milky_way","minibus","minidisc","mobile_phone_off","money_mouth_face","money_with_wings","moneybag","monkey","monkey_face","monorail","moon","mortar_board","mosque","motor_boat","motor_scooter","motorcycle","motorway","mount_fuji","mountain","mountain_biking_man","mountain_biking_woman","mountain_cableway","mountain_railway","mountain_snow","mouse","mouse2","movie_camera","moyai","mrs_claus","muscle","mushroom","musical_keyboard","musical_note","musical_score","mute","nail_care","name_badge","national_park","nauseated_face","necktie","negative_squared_cross_mark","nerd_face","neutral_face","new","new_moon","new_moon_with_face","newspaper","newspaper_roll","next_track_button","ng","no_good_man","no_good_woman","night_with_stars","no_bell","no_bicycles","no_entry","no_entry_sign","no_mobile_phones","no_mouth","no_pedestrians","no_smoking","non-potable_water","nose","notebook","notebook_with_decorative_cover","notes","nut_and_bolt","o","o2","ocean","octopus","oden","office","oil_drum","ok","ok_hand","ok_man","ok_woman","old_key","older_man","older_woman","om","on","oncoming_automobile","oncoming_bus","oncoming_police_car","oncoming_taxi","open_file_folder","open_hands","open_mouth","open_umbrella","ophiuchus","orange_book","orthodox_cross","outbox_tray","owl","ox","package","page_facing_up","page_with_curl","pager","paintbrush","palm_tree","pancakes","panda_face","paperclip","paperclips","parasol_on_ground","parking","part_alternation_mark","partly_sunny","passenger_ship","passport_control","pause_button","peace_symbol","peach","peanuts","pear","pen","pencil2","penguin","pensive","performing_arts","persevere","person_fencing","pouting_woman","phone","pick","pig","pig2","pig_nose","pill","pineapple","ping_pong","pisces","pizza","place_of_worship","plate_with_cutlery","play_or_pause_button","point_down","point_left","point_right","point_up","point_up_2","police_car","policewoman","poodle","popcorn","post_office","postal_horn","postbox","potable_water","potato","pouch","poultry_leg","pound","rage","pouting_cat","pouting_man","pray","prayer_beads","pregnant_woman","previous_track_button","prince","princess","printer","purple_heart","purse","pushpin","put_litter_in_its_place","question","rabbit","rabbit2","racehorse","racing_car","radio","radio_button","radioactive","railway_car","railway_track","rainbow","rainbow_flag","raised_back_of_hand","raised_hand_with_fingers_splayed","raised_hands","raising_hand_woman","raising_hand_man","ram","ramen","rat","record_button","recycle","red_circle","registered","relaxed","relieved","reminder_ribbon","repeat_one","rescue_worker_helmet","restroom","revolving_hearts","rewind","rhinoceros","ribbon","rice","rice_ball","rice_cracker","rice_scene","right_anger_bubble","ring","robot","rocket","rofl","roll_eyes","roller_coaster","rooster","rose","rosette","rotating_light","round_pushpin","rowing_man","rowing_woman","rugby_football","running_man","running_shirt_with_sash","running_woman","sa","sagittarius","sake","sandal","santa","satellite","saxophone","school","school_satchel","scissors","scorpion","scorpius","scream","scream_cat","scroll","seat","secret","see_no_evil","seedling","selfie","shallow_pan_of_food","shamrock","shark","shaved_ice","sheep","shell","shield","shinto_shrine","ship","shirt","shopping","shopping_cart","shower","shrimp","signal_strength","six_pointed_star","ski","skier","skull","skull_and_crossbones","sleeping","sleeping_bed","sleepy","slightly_frowning_face","slightly_smiling_face","slot_machine","small_airplane","small_blue_diamond","small_orange_diamond","small_red_triangle","small_red_triangle_down","smile","smile_cat","smiley","smiley_cat","smiling_imp","smirk","smirk_cat","smoking","snail","snake","sneezing_face","snowboarder","snowflake","snowman","snowman_with_snow","sob","soccer","soon","sos","sound","space_invader","spades","spaghetti","sparkle","sparkler","sparkles","sparkling_heart","speak_no_evil","speaker","speaking_head","speech_balloon","speedboat","spider","spider_web","spiral_calendar","spiral_notepad","spoon","squid","stadium","star","star2","star_and_crescent","star_of_david","stars","station","statue_of_liberty","steam_locomotive","stew","stop_button","stop_sign","stopwatch","straight_ruler","strawberry","stuck_out_tongue","stuck_out_tongue_closed_eyes","stuck_out_tongue_winking_eye","studio_microphone","stuffed_flatbread","sun_behind_large_cloud","sun_behind_rain_cloud","sun_behind_small_cloud","sun_with_face","sunflower","sunglasses","sunny","sunrise","sunrise_over_mountains","surfing_man","surfing_woman","sushi","suspension_railway","sweat","sweat_drops","sweat_smile","sweet_potato","swimming_man","swimming_woman","symbols","synagogue","syringe","taco","tada","tanabata_tree","taurus","taxi","tea","telephone_receiver","telescope","tennis","tent","thermometer","thinking","thought_balloon","ticket","tickets","tiger","tiger2","timer_clock","tipping_hand_man","tired_face","tm","toilet","tokyo_tower","tomato","tongue","top","tophat","tornado","trackball","tractor","traffic_light","train","train2","tram","triangular_flag_on_post","triangular_ruler","trident","triumph","trolleybus","trophy","tropical_drink","tropical_fish","truck","trumpet","tulip","tumbler_glass","turkey","turtle","tv","twisted_rightwards_arrows","two_hearts","two_men_holding_hands","two_women_holding_hands","u5272","u5408","u55b6","u6307","u6708","u6709","u6e80","u7121","u7533","u7981","u7a7a","umbrella","unamused","underage","unicorn","unlock","up","upside_down_face","v","vertical_traffic_light","vhs","vibration_mode","video_camera","video_game","violin","virgo","volcano","volleyball","vs","vulcan_salute","walking_man","walking_woman","waning_crescent_moon","waning_gibbous_moon","warning","wastebasket","watch","water_buffalo","watermelon","wave","wavy_dash","waxing_crescent_moon","wc","weary","wedding","weight_lifting_man","weight_lifting_woman","whale","whale2","wheel_of_dharma","wheelchair","white_check_mark","white_circle","white_flag","white_flower","white_large_square","white_medium_small_square","white_medium_square","white_small_square","white_square_button","wilted_flower","wind_chime","wind_face","wine_glass","wink","wolf","woman","woman_artist","woman_astronaut","woman_cartwheeling","woman_cook","woman_facepalming","woman_factory_worker","woman_farmer","woman_firefighter","woman_health_worker","woman_judge","woman_juggling","woman_mechanic","woman_office_worker","woman_pilot","woman_playing_handball","woman_playing_water_polo","woman_scientist","woman_shrugging","woman_singer","woman_student","woman_teacher","woman_technologist","woman_with_turban","womans_clothes","womans_hat","women_wrestling","womens","world_map","worried","wrench","writing_hand","yellow_heart","yen","yin_yang","yum","zap","zipper_mouth_face","zzz","octocat","Converter","converterOptions","_parseExtension","langExtensions","outputModifiers","legacyExtensionLoading","validExt","listen","setConvFlavor","parsed","raw","format","gOpt","_constructor","_dispatch","evtName","globals","ei","nText","makeHtml","gHtmlBlocks","gHtmlMdBlocks","gHtmlSpans","gUrls","gTitles","gDimensions","gListLevel","hashLinkCounts","converter","rsp","rgx","rTrimInputText","makeMarkdown","makeMd","src","HTMLParser","clean","node","n","childNodes","child","nodeType","nodeValue","split","removeChild","window","document","doc","createElement","innerHTML","preList","pres","querySelectorAll","presPH","childElementCount","firstChild","tagName","content","trim","language","getAttribute","classes","className","c","matches","outerHTML","setAttribute","substitutePreCodeTags","nodes","mdDoc","addExtension","useExtension","extensionName","splice","output","getMetadata","getMetadataFormat","_setMetadataPair","_setMetadataFormat","_setMetadataRaw","writeAnchorTag","linkText","linkId","url","m5","m6","title","result","wm","st","escape","mentions","username","lnk","target","simpleURLRegex","simpleURLRegex2","delimUrlRegex","simpleMailRegex","delimMailRegex","replaceLink","leadingMagicChars","m2","m3","trailingPunctuation","trailingMagicChars","lnkTxt","append","lmc","tmc","replaceMail","href","bq","pre","codeblock","nextChar","doctype","doctypeParsed","charset","lang","meta","leadingText","numSpaces","emojiCode","delim","blockText","blockTags","repFunc","inside","opTagPos","rgx1","patLeft","patRight","subTexts","newSubText1","concat","hashHTMLSpan","html","repText","limit","num","$1","headerId","prefix","customizedHeaderId","isNaN","parseInt","setextRegexH1","setextRegexH2","spanGamut","hID","hashBlock","matchFound","hLevel","atxStyle","hText","span","header","writeImageTag","altText","width","height","gDims","parseInside","lead","processListItems","listStr","trimTrailing","isParagraphed","m4","taskbtn","checked","item","bulletStyle","otp","wm2","styleStartNumber","list","listType","res","parseConsecutiveLists","olRgx","ulRgx","counterRxg","parseCL","style","parseMetadataContents","wholematch","grafs","grafsOut","grafsOutIt","codeFlag","$2","re","replaceFunc","blankLines","parseStyles","sLine","parseHeaders","tableHeaderId","parseCells","cell","parseTable","rawTable","tableLines","rawHeaders","map","rawStyles","rawCells","headers","styles","cells","shift","row","ii","tb","tblLgn","buildTable","charCodeToReplace","fromCharCode","hasChildNodes","children","childrenLength","innerTxt","headerLevel","headerMark","hasAttribute","listItems","listItemsLenght","listNum","listItemTxt","childrenLenght","spansOnly","data","tableArray","headings","rows","headContent","allign","cols","getElementsByTagName","cellContent","cellSpacesCount","strLen","define","amd","module","exports"],"mappings":";CACA,WAKA,SAASA,EAAgBC,GACvB,aAEA,IAAIC,GACFC,yBACEC,cAAc,EACdC,SAAU,wDACVC,KAAM,WAERC,YACEH,cAAc,EACdC,SAAU,kCACVC,KAAM,WAERE,gBACEJ,cAAc,EACdC,SAAU,4JACVC,KAAM,UAERG,mBACEL,cAAc,EACdC,SAAU,uKACVC,KAAM,WAERI,sBACEN,cAAc,EACdC,SAAU,oIACVC,KAAM,WAERK,aACEP,cAAc,EACdC,SAAU,2JACVC,KAAM,WAERM,kBACER,cAAc,EACdC,SAAU,gCACVC,KAAM,WAERO,oBACET,cAAc,EACdC,SAAU,sCACVC,KAAM,WAERQ,oBACEV,cAAc,EACdC,SAAU,iCACVC,KAAM,WAERS,oCACEX,cAAc,EACdC,SAAU,sEACVC,KAAM,WAERU,2BACEZ,cAAc,EACdC,SAAU,mDACVC,KAAM,WAERW,yBACEb,cAAc,EACdC,SAAU,+CACVC,KAAM,WAERY,eACEd,cAAc,EACdC,SAAU,oCACVC,KAAM,WAERa,QACEf,cAAc,EACdC,SAAU,6BACVC,KAAM,WAERc,gBACEhB,cAAc,EACdC,SAAU,6BACVC,KAAM,WAERe,cACEjB,cAAc,EACdC,SAAU,6CACVC,KAAM,WAERgB,WACElB,cAAc,EACdC,SAAU,mCACVC,KAAM,WAERiB,mBACEnB,cAAc,EACdC,SAAU,kEACVC,KAAM,WAERkB,qBACEpB,cAAc,EACdqB,YAAa,kDACbnB,KAAM,WAERoB,sCACEtB,cAAc,EACdqB,YAAa,oEACbnB,KAAM,WAERqB,kBACEvB,cAAc,EACdqB,YAAa,gDACbnB,KAAM,WAERsB,+BACExB,cAAc,EACdqB,YAAa,6EACbnB,KAAM,WAERuB,YACEzB,cAAc,EACdqB,YAAa,2BACbnB,KAAM,WAERwB,gBACE1B,aAAc,yBACdqB,YAAa,yFACbnB,KAAM,UAERyB,cACE3B,cAAc,EACdqB,YAAa,0IACbnB,KAAM,WAER0B,sBACE5B,cAAc,EACdqB,YAAa,gCACbnB,KAAM,WAER2B,0BACE7B,cAAc,EACdqB,YAAa,oDACbnB,KAAM,WAER4B,OACE9B,cAA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","file":"showdown.min.js"} \ No newline at end of file diff --git a/stam.js b/stam.js deleted file mode 100644 index 98e8e35..0000000 --- a/stam.js +++ /dev/null @@ -1,2 +0,0 @@ - -console.log('i do not know why i help'); From fe9d751a375741bb38d024a4fb1549e646bc45ba Mon Sep 17 00:00:00 2001 From: necopinus Date: Sat, 26 Sep 2020 03:32:07 +0000 Subject: [PATCH 05/21] Updated infrastructure diagram SVG --- infrastructure.svg | 432 ++++++++++++++++++++++----------------------- 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/infrastructure.svg b/infrastructure.svg index 7b0aea9..22b4161 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -1,63 +1,63 @@ - - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot cluster_carl - -Carl + +Carl cluster_unused - -Unused + +Unused cluster_ifttt - -IFTTT + +IFTTT cluster_netlify - -Netlify + +Netlify cluster_cloudfront - -Amazon Cloudfront + +Amazon Cloudfront cluster_lambda - -Amazon Lambda + +Amazon Lambda google_calendar - - -Google -Calendar + + +Google +Calendar @@ -65,27 +65,27 @@ zapier - -Zapier + +Zapier google_calendar->zapier - - -Pulled by -Zapier + + +Pulled by +Zapier registration_form - - -Registration -Form + + +Registration +Form @@ -93,25 +93,25 @@ discord - -Discord + +Discord registration_form->discord - - -Invite link + + +Invite link google_analytics - -Google -Analytics + +Google +Analytics @@ -119,10 +119,10 @@ reboot_deck - - -"Don't Waste the -Reboot" deck + + +"Don't Waste the +Reboot" deck @@ -130,44 +130,44 @@ home_deck - - -"The New Old -Home" deck + + +"The New Old +Home" deck zapier->discord - - -Post in -#events + + +Post in +#events twitter - -Twitter + +Twitter zapier->twitter - - -Tweet about -new content + + +Tweet about +new content calendar_yak - -calendar_yak + +calendar_yak @@ -175,58 +175,58 @@ welcome_bot - -welcome_bot + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series yakyak - -yakyak + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data substack - -Substack + +Substack @@ -234,71 +234,71 @@ rss_applet - -create-post -Applets + +create-post +Applets substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT twitter_applets - -Twitter -Applets + +Twitter +Applets substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds - - -Member RSS -Feeds + + +Member RSS +Feeds member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT facebook - -Facebook + +Facebook @@ -306,8 +306,8 @@ linkedin - -LinkedIn + +LinkedIn @@ -315,8 +315,8 @@ glitch - -Glitch + +Glitch @@ -324,34 +324,34 @@ create_post - -create-post + +create-post rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content netlify_applet - -Netlify Build -Hook Applet + +Netlify Build +Hook Applet @@ -359,192 +359,192 @@ netlify_ci - -Netlify Continuous -Integration + +Netlify Continuous +Integration netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours github - -GitHub + +GitHub github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit jekyll - -Jekyll + +Jekyll netlify_ci->jekyll - - -Build website + + +Build website netlify_cdn - -Netlify -CDN + +Netlify +CDN jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files website - - -Yak Collective -Website + + +Yak Collective +Website netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront featured_yak - - -"Featured Yak" -RSS Feed + + +"Featured Yak" +RSS Feed netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->registration_form - - -Sign up form -(minimal data) + + +Sign up form +(minimal data) website->google_analytics - - -Visitor analytics + + +Visitor analytics website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content create_post->github - - -Commit new -member post + + +Commit new +member post namecheap - -Namecheap + +Namecheap namecheap->netlify_cdn - - -DNS information + + +DNS information knack - -Knack + +Knack @@ -552,8 +552,8 @@ roam - -Roam + +Roam @@ -564,9 +564,9 @@ visitor->website - - -Website visitor + + +Website visitor @@ -575,9 +575,9 @@ developer->github - - -Git commit + + +Git commit From f1ba8230b03ae4aa7e72b928c56dbd12aef5b662 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Fri, 25 Sep 2020 21:42:36 -0600 Subject: [PATCH 06/21] Add symbol key --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index c24cf93..8360d0e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,17 @@ Prototype documentation tool for [Yak Collective](https://yakcollective.org) [IT Infrastructure](https://roamresearch.com/#/app/ArtOfGig/page/6fhTlx1p_). +## Symbol Key + +| Symbol | Macro | Meaning | +|:-------------------:|:------------------:|:-------------------------------------------------------------------------------------- | +| Double Green Circle | `STATIC_DATA` | Website or service that functions as a (relatively) static data source/destination | +| Green Oval | `EXTERNAL_SERVICE` | Externally-facing web service used by YC members/participants (and sometimes others) | +| Blue Oval | `INTERNAL_SERVICE` | Internally-facing web service used by few YC members (sometimes not accessible at all) | +| Blue Rectangle | `APPLET` | A function, service applet, or internal tool; contained by and run by some service | +| Red Line | `USER_DATA` | Manual data flow (someone creates an account, reviews a list and takes action, etc.) | +| Black Line | `AUTO_DATA` | Automatic data flows (service takes action based on a timer, webhook, etc.) | + ## Development Most (all?) browsers restrict how JavaScript can access `file://` URLs, even for HTML files opened directly from the file system. For this reason, you'll need to fire up a local web server to work on `index.html`, etc. Python 3 makes this easy: From a8e02db0c5bd34f24ccdc8e62d4abbfccb3d8497 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Tue, 24 Nov 2020 20:16:42 -0700 Subject: [PATCH 07/21] Google Analytics is now owned by Yakbot --- infrastructure.dot | 2 +- infrastructure.svg | 462 ++++++++++++++++++++++----------------------- 2 files changed, 232 insertions(+), 232 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index ea14cb9..8128c81 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -23,11 +23,11 @@ digraph yak_infrastructure { labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"; color = "gray"; + google_analytics INTERNAL_SERVICE [label = "Google\nAnalytics"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; google_calendar STATIC_DATA [label = "Google\nCalendar"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; registration_form STATIC_DATA [label = "Registration\nForm"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; } - google_analytics INTERNAL_SERVICE [label = "Google\nAnalytics"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; reboot_deck STATIC_DATA [label = "\"Don't Waste the\nReboot\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/s7km8fEQp"]; home_deck STATIC_DATA [label = "\"The New Old\nHome\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/sGxc8YzrD"]; } diff --git a/infrastructure.svg b/infrastructure.svg index 22b4161..01b5ca7 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -1,63 +1,73 @@ - - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot cluster_carl - -Carl + +Carl cluster_unused - -Unused + +Unused cluster_ifttt - -IFTTT + +IFTTT cluster_netlify - -Netlify + +Netlify cluster_cloudfront - -Amazon Cloudfront + +Amazon Cloudfront cluster_lambda - -Amazon Lambda + +Amazon Lambda - + +google_analytics + + +Google +Analytics + + + + + google_calendar - - - -Google -Calendar + + + +Google +Calendar @@ -65,27 +75,27 @@ zapier - -Zapier + +Zapier google_calendar->zapier - - -Pulled by -Zapier + + +Pulled by +Zapier - + registration_form - - - -Registration -Form + + + +Registration +Form @@ -93,36 +103,26 @@ discord - -Discord + +Discord registration_form->discord - - -Invite link - - - -google_analytics - - -Google -Analytics - - + + +Invite link reboot_deck - - -"Don't Waste the -Reboot" deck + + +"Don't Waste the +Reboot" deck @@ -130,44 +130,44 @@ home_deck - - -"The New Old -Home" deck + + +"The New Old +Home" deck zapier->discord - - -Post in -#events + + +Post in +#events twitter - -Twitter + +Twitter zapier->twitter - - -Tweet about -new content + + +Tweet about +new content calendar_yak - -calendar_yak + +calendar_yak @@ -175,58 +175,58 @@ welcome_bot - -welcome_bot + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series yakyak - -yakyak + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data substack - -Substack + +Substack @@ -234,71 +234,71 @@ rss_applet - -create-post -Applets + +create-post +Applets substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT twitter_applets - -Twitter -Applets + +Twitter +Applets substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds - - -Member RSS -Feeds + + +Member RSS +Feeds member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT facebook - -Facebook + +Facebook @@ -306,8 +306,8 @@ linkedin - -LinkedIn + +LinkedIn @@ -315,8 +315,8 @@ glitch - -Glitch + +Glitch @@ -324,34 +324,34 @@ create_post - -create-post + +create-post rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content netlify_applet - -Netlify Build -Hook Applet + +Netlify Build +Hook Applet @@ -359,192 +359,192 @@ netlify_ci - -Netlify Continuous -Integration + +Netlify Continuous +Integration netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours github - -GitHub + +GitHub github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit jekyll - -Jekyll + +Jekyll netlify_ci->jekyll - - -Build website + + +Build website netlify_cdn - -Netlify -CDN + +Netlify +CDN jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files website - - -Yak Collective -Website + + +Yak Collective +Website netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront featured_yak - - -"Featured Yak" -RSS Feed + + +"Featured Yak" +RSS Feed netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront netlify_cdn->create_post - - -Create Amazon -Lambda function - - - -website->registration_form - - -Sign up form -(minimal data) + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics + + +Visitor analytics + + + +website->registration_form + + +Sign up form +(minimal data) website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content create_post->github - - -Commit new -member post + + +Commit new +member post namecheap - -Namecheap + +Namecheap namecheap->netlify_cdn - - -DNS information + + +DNS information knack - -Knack + +Knack @@ -552,8 +552,8 @@ roam - -Roam + +Roam @@ -564,9 +564,9 @@ visitor->website - - -Website visitor + + +Website visitor @@ -575,9 +575,9 @@ developer->github - - -Git commit + + +Git commit From f92ef7e3bbd0706fc8b40327d6225a61e86c64ea Mon Sep 17 00:00:00 2001 From: necopinus Date: Wed, 25 Nov 2020 03:17:34 +0000 Subject: [PATCH 08/21] Updated infrastructure diagram SVG --- infrastructure.svg | 432 ++++++++++++++++++++++----------------------- 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/infrastructure.svg b/infrastructure.svg index 01b5ca7..727a443 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -1,62 +1,62 @@ - - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot cluster_carl - -Carl + +Carl cluster_unused - -Unused + +Unused cluster_ifttt - -IFTTT + +IFTTT cluster_netlify - -Netlify + +Netlify cluster_cloudfront - -Amazon Cloudfront + +Amazon Cloudfront cluster_lambda - -Amazon Lambda + +Amazon Lambda google_analytics - -Google -Analytics + +Google +Analytics @@ -64,10 +64,10 @@ google_calendar - - -Google -Calendar + + +Google +Calendar @@ -75,27 +75,27 @@ zapier - -Zapier + +Zapier google_calendar->zapier - - -Pulled by -Zapier + + +Pulled by +Zapier registration_form - - -Registration -Form + + +Registration +Form @@ -103,26 +103,26 @@ discord - -Discord + +Discord registration_form->discord - - -Invite link + + +Invite link reboot_deck - - -"Don't Waste the -Reboot" deck + + +"Don't Waste the +Reboot" deck @@ -130,44 +130,44 @@ home_deck - - -"The New Old -Home" deck + + +"The New Old +Home" deck zapier->discord - - -Post in -#events + + +Post in +#events twitter - -Twitter + +Twitter zapier->twitter - - -Tweet about -new content + + +Tweet about +new content calendar_yak - -calendar_yak + +calendar_yak @@ -175,58 +175,58 @@ welcome_bot - -welcome_bot + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series yakyak - -yakyak + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data substack - -Substack + +Substack @@ -234,71 +234,71 @@ rss_applet - -create-post -Applets + +create-post +Applets substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT twitter_applets - -Twitter -Applets + +Twitter +Applets substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds - - -Member RSS -Feeds + + +Member RSS +Feeds member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT facebook - -Facebook + +Facebook @@ -306,8 +306,8 @@ linkedin - -LinkedIn + +LinkedIn @@ -315,8 +315,8 @@ glitch - -Glitch + +Glitch @@ -324,34 +324,34 @@ create_post - -create-post + +create-post rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content netlify_applet - -Netlify Build -Hook Applet + +Netlify Build +Hook Applet @@ -359,192 +359,192 @@ netlify_ci - -Netlify Continuous -Integration + +Netlify Continuous +Integration netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours github - -GitHub + +GitHub github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit jekyll - -Jekyll + +Jekyll netlify_ci->jekyll - - -Build website + + +Build website netlify_cdn - -Netlify -CDN + +Netlify +CDN jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files website - - -Yak Collective -Website + + +Yak Collective +Website netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront featured_yak - - -"Featured Yak" -RSS Feed + + +"Featured Yak" +RSS Feed netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics + + +Visitor analytics website->registration_form - - -Sign up form -(minimal data) + + +Sign up form +(minimal data) website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content create_post->github - - -Commit new -member post + + +Commit new +member post namecheap - -Namecheap + +Namecheap namecheap->netlify_cdn - - -DNS information + + +DNS information knack - -Knack + +Knack @@ -552,8 +552,8 @@ roam - -Roam + +Roam @@ -564,9 +564,9 @@ visitor->website - - -Website visitor + + +Website visitor @@ -575,9 +575,9 @@ developer->github - - -Git commit + + +Git commit From a889239df0dc29be72c7845b576db95ee03b9577 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Tue, 24 Nov 2020 20:46:07 -0700 Subject: [PATCH 09/21] Maier's infrastructure --- infrastructure.dot | 22 +- infrastructure.svg | 683 +++++++++++++++++++++++++-------------------- 2 files changed, 397 insertions(+), 308 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index 8128c81..2a07f49 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -23,6 +23,7 @@ digraph yak_infrastructure { labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"; color = "gray"; + gmail INTERNAL_SERVICE [label = "Gmail"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"]; google_analytics INTERNAL_SERVICE [label = "Google\nAnalytics"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; google_calendar STATIC_DATA [label = "Google\nCalendar"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; registration_form STATIC_DATA [label = "Registration\nForm"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; @@ -34,13 +35,22 @@ digraph yak_infrastructure { zapier INTERNAL_SERVICE [label = "Zapier"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; + subgraph cluster_vultr { + labelloc = "t"; + label = "Vultr"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/WpgCSZdjg"; + color = "gray"; + + yak_scraper APPLET [label = "yak_scraper"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AaFxsbkdW"]; + gigayak APPLET [label = "gigayak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/_1voFfg7g"]; + } + subgraph cluster_carl { labelloc = "t"; label = "Carl"; labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"; color = "gray"; - calendar_yak APPLET [label = "calendar_yak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/4lz1jh2sn"]; welcome_bot APPLET [label = "welcome_bot"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/S_Xkw1vVi"]; yakyak APPLET [label = "yakyak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/Q1LoZ_dE4"]; } @@ -127,6 +137,11 @@ digraph yak_infrastructure { welcome_bot -> discord AUTO_DATA [label = "Welcome message\nseries"]; yakyak -> discord AUTO_DATA [label = "Prune inactive\nusers"]; + # Member interactions + # + discord -> {gigayak, yak_scraper} USER_DATA [label = "User\ncommand"]; + {gigayak, yak_scraper} -> discord USER_DATA [label = "Requested info or\nacknowledgement"]; + # Building the website # developer -> github USER_DATA [label = "Git commit"]; @@ -154,6 +169,9 @@ digraph yak_infrastructure { # Google Calendar -> Twitter/Discord # google_calendar -> zapier AUTO_DATA [label = "Pulled by\nZapier"]; - zapier -> discord AUTO_DATA [label = "Post in\n#events"]; zapier -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; + + google_calendar -> gmail AUTO_DATA [label = "Notification and\nagenda emails"]; + gmail -> yak_scraper AUTO_DATA [label = "Gmail\nAPI"]; + yak_scraper -> discord AUTO_DATA [label = "Post in\n#events"]; } diff --git a/infrastructure.svg b/infrastructure.svg index 01b5ca7..6301863 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -4,580 +4,651 @@ - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot -cluster_carl - -Carl +cluster_vultr + +Vultr -cluster_unused - -Unused +cluster_carl + +Carl -cluster_ifttt - -IFTTT +cluster_unused + +Unused -cluster_netlify - -Netlify +cluster_ifttt + +IFTTT -cluster_cloudfront - -Amazon Cloudfront +cluster_netlify + +Netlify +cluster_cloudfront + +Amazon Cloudfront + + cluster_lambda - -Amazon Lambda + +Amazon Lambda - + +gmail + + +Gmail + + + + + +yak_scraper + + +yak_scraper + + + + + +gmail->yak_scraper + + +Gmail +API + + + google_analytics - - -Google -Analytics + + +Google +Analytics - + google_calendar - - - -Google -Calendar + + + +Google +Calendar + + +google_calendar->gmail + + +Notification and +agenda emails + - + zapier - - -Zapier + + +Zapier - + google_calendar->zapier - - -Pulled by -Zapier + + +Pulled by +Zapier - + registration_form - - - -Registration -Form + + + +Registration +Form - + discord - - -Discord + + +Discord registration_form->discord - - -Invite link + + +Invite link - + reboot_deck - - - -"Don't Waste the -Reboot" deck + + + +"Don't Waste the +Reboot" deck - + home_deck - - - -"The New Old -Home" deck + + + +"The New Old +Home" deck - - -zapier->discord - - -Post in -#events - - + twitter - - -Twitter + + +Twitter - + zapier->twitter - - -Tweet about -new content + + +Tweet about +new content - - -calendar_yak - - -calendar_yak + + +yak_scraper->discord + + +Requested info or +acknowledgement + + + +yak_scraper->discord + + +Post in +#events + + + +gigayak + + +gigayak + + +gigayak->discord + + +Requested info or +acknowledgement + - + welcome_bot - - -welcome_bot + + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series - + yakyak - - -yakyak + + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users + + + +discord->yak_scraper + + +User +command + + + +discord->gigayak + + +User +command discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data - + substack - - -Substack + + +Substack - + rss_applet - - -create-post -Applets + + +create-post +Applets - + substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + twitter_applets - - -Twitter -Applets + + +Twitter +Applets - + substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + member_feeds - - - -Member RSS -Feeds + + + +Member RSS +Feeds - + member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + facebook - - -Facebook + + +Facebook - + linkedin - - -LinkedIn + + +LinkedIn - + glitch - - -Glitch + + +Glitch - + create_post - - -create-post + + +create-post - + rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook - + twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content - + netlify_applet - - -Netlify Build -Hook Applet + + +Netlify Build +Hook Applet - + netlify_ci - - -Netlify Continuous -Integration + + +Netlify Continuous +Integration - + netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours - + github - - -GitHub + + +GitHub - + github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit - + jekyll - - -Jekyll + + +Jekyll - + netlify_ci->jekyll - - -Build website + + +Build website - + netlify_cdn - - -Netlify -CDN + + +Netlify +CDN - + jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files - + website - - - -Yak Collective -Website + + + +Yak Collective +Website - + netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + featured_yak - - - -"Featured Yak" -RSS Feed + + + +"Featured Yak" +RSS Feed - + netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics + + +Visitor analytics website->registration_form - - -Sign up form -(minimal data) + + +Sign up form +(minimal data) website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF - + featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content - + create_post->github - - -Commit new -member post + + +Commit new +member post - + namecheap - - -Namecheap + + +Namecheap - + namecheap->netlify_cdn - - -DNS information + + +DNS information - + knack - - -Knack + + +Knack - + roam - - -Roam + + +Roam - + visitor visitor->website - - -Website visitor + + +Website visitor - + developer - + developer->github - - -Git commit + + +Git commit From fca4f5b91c81ed0697b5f52f50ea309aafdf9427 Mon Sep 17 00:00:00 2001 From: necopinus Date: Wed, 25 Nov 2020 03:47:55 +0000 Subject: [PATCH 10/21] Updated infrastructure diagram SVG --- infrastructure.svg | 492 ++++++++++++++++++++++----------------------- 1 file changed, 246 insertions(+), 246 deletions(-) diff --git a/infrastructure.svg b/infrastructure.svg index 6301863..73957d7 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -1,66 +1,66 @@ - - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot cluster_vultr - -Vultr + +Vultr cluster_carl - -Carl + +Carl cluster_unused - -Unused + +Unused cluster_ifttt - -IFTTT + +IFTTT cluster_netlify - -Netlify + +Netlify cluster_cloudfront - -Amazon Cloudfront + +Amazon Cloudfront cluster_lambda - -Amazon Lambda + +Amazon Lambda gmail - -Gmail + +Gmail @@ -68,26 +68,26 @@ yak_scraper - -yak_scraper + +yak_scraper gmail->yak_scraper - - -Gmail -API + + +Gmail +API google_analytics - -Google -Analytics + +Google +Analytics @@ -95,46 +95,46 @@ google_calendar - - -Google -Calendar + + +Google +Calendar google_calendar->gmail - - -Notification and -agenda emails + + +Notification and +agenda emails zapier - -Zapier + +Zapier google_calendar->zapier - - -Pulled by -Zapier + + +Pulled by +Zapier registration_form - - -Registration -Form + + +Registration +Form @@ -142,26 +142,26 @@ discord - -Discord + +Discord registration_form->discord - - -Invite link + + +Invite link reboot_deck - - -"Don't Waste the -Reboot" deck + + +"Don't Waste the +Reboot" deck @@ -169,10 +169,10 @@ home_deck - - -"The New Old -Home" deck + + +"The New Old +Home" deck @@ -180,124 +180,124 @@ twitter - -Twitter + +Twitter zapier->twitter - - -Tweet about -new content + + +Tweet about +new content yak_scraper->discord - - -Requested info or -acknowledgement + + +Requested info or +acknowledgement yak_scraper->discord - - -Post in -#events + + +Post in +#events gigayak - -gigayak + +gigayak gigayak->discord - - -Requested info or -acknowledgement + + +Requested info or +acknowledgement welcome_bot - -welcome_bot + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series yakyak - -yakyak + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users discord->yak_scraper - - -User -command + + +User +command discord->gigayak - - -User -command + + +User +command discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data substack - -Substack + +Substack @@ -305,71 +305,71 @@ rss_applet - -create-post -Applets + +create-post +Applets substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT twitter_applets - -Twitter -Applets + +Twitter +Applets substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds - - -Member RSS -Feeds + + +Member RSS +Feeds member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT facebook - -Facebook + +Facebook @@ -377,8 +377,8 @@ linkedin - -LinkedIn + +LinkedIn @@ -386,8 +386,8 @@ glitch - -Glitch + +Glitch @@ -395,34 +395,34 @@ create_post - -create-post + +create-post rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content netlify_applet - -Netlify Build -Hook Applet + +Netlify Build +Hook Applet @@ -430,192 +430,192 @@ netlify_ci - -Netlify Continuous -Integration + +Netlify Continuous +Integration netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours github - -GitHub + +GitHub github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit jekyll - -Jekyll + +Jekyll netlify_ci->jekyll - - -Build website + + +Build website netlify_cdn - -Netlify -CDN + +Netlify +CDN jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files website - - -Yak Collective -Website + + +Yak Collective +Website netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront featured_yak - - -"Featured Yak" -RSS Feed + + +"Featured Yak" +RSS Feed netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics + + +Visitor analytics website->registration_form - - -Sign up form -(minimal data) + + +Sign up form +(minimal data) website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content create_post->github - - -Commit new -member post + + +Commit new +member post namecheap - -Namecheap + +Namecheap namecheap->netlify_cdn - - -DNS information + + +DNS information knack - -Knack + +Knack @@ -623,8 +623,8 @@ roam - -Roam + +Roam @@ -635,9 +635,9 @@ visitor->website - - -Website visitor + + +Website visitor @@ -646,9 +646,9 @@ developer->github - - -Git commit + + +Git commit From 4ce23aed8361b495ccadfbdb391ac996bbd75275 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Tue, 24 Nov 2020 21:00:57 -0700 Subject: [PATCH 11/21] Actually, the Calendar Yak is its own thing --- infrastructure.dot | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index 2a07f49..a176f65 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -41,6 +41,7 @@ digraph yak_infrastructure { labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/WpgCSZdjg"; color = "gray"; + calendar_yak APPLET [label = "Calendar Yak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/h8CetC_Re"]; yak_scraper APPLET [label = "yak_scraper"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AaFxsbkdW"]; gigayak APPLET [label = "gigayak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/_1voFfg7g"]; } @@ -172,6 +173,6 @@ digraph yak_infrastructure { zapier -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; google_calendar -> gmail AUTO_DATA [label = "Notification and\nagenda emails"]; - gmail -> yak_scraper AUTO_DATA [label = "Gmail\nAPI"]; - yak_scraper -> discord AUTO_DATA [label = "Post in\n#events"]; + gmail -> calendar_yak AUTO_DATA [label = "Gmail\nAPI"]; + calendar_yak -> discord AUTO_DATA [label = "Post in\n#events"]; } From b6a4e515380a4ef28d7890a11c868cdf4a561dca Mon Sep 17 00:00:00 2001 From: necopinus Date: Wed, 25 Nov 2020 04:02:44 +0000 Subject: [PATCH 12/21] Updated infrastructure diagram SVG --- infrastructure.svg | 281 +++++++++++++++++++++++---------------------- 1 file changed, 145 insertions(+), 136 deletions(-) diff --git a/infrastructure.svg b/infrastructure.svg index 73957d7..f41e9a7 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -4,12 +4,12 @@ - + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google @@ -22,18 +22,18 @@ cluster_vultr - -Vultr + +Vultr cluster_carl - -Carl + +Carl cluster_unused - -Unused + +Unused cluster_ifttt @@ -59,27 +59,27 @@ gmail - -Gmail + +Gmail - + -yak_scraper - - -yak_scraper +calendar_yak + + +Calendar Yak - + -gmail->yak_scraper - - -Gmail -API +gmail->calendar_yak + + +Gmail +API @@ -105,8 +105,8 @@ google_calendar->gmail - - + + Notification and agenda emails @@ -139,20 +139,20 @@ - + discord - - -Discord + + +Discord registration_form->discord - - -Invite link + + +Invite link @@ -177,9 +177,9 @@ - + twitter - + Twitter @@ -193,118 +193,127 @@ Tweet about new content - - -yak_scraper->discord - - -Requested info or -acknowledgement + + +calendar_yak->discord + + +Post in +#events + + + +yak_scraper + + +yak_scraper + + - + yak_scraper->discord - - -Post in -#events + + +Requested info or +acknowledgement - + gigayak - - -gigayak + + +gigayak gigayak->discord - - -Requested info or -acknowledgement + + +Requested info or +acknowledgement - + welcome_bot - - -welcome_bot + + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series - + yakyak - - -yakyak + + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users discord->yak_scraper - - -User -command + + +User +command discord->gigayak - - -User -command + + +User +command discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data - + substack - + Substack - + rss_applet - + create-post Applets @@ -320,9 +329,9 @@ by IFTTT - + twitter_applets - + Twitter Applets @@ -338,9 +347,9 @@ by IFTTT - + member_feeds - + Member RSS @@ -365,36 +374,36 @@ by IFTTT - + facebook - - -Facebook + + +Facebook - + linkedin - - -LinkedIn + + +LinkedIn - + glitch - - -Glitch + + +Glitch - + create_post - + create-post @@ -417,9 +426,9 @@ new content - + netlify_applet - + Netlify Build Hook Applet @@ -427,9 +436,9 @@ - + netlify_ci - + Netlify Continuous Integration @@ -445,9 +454,9 @@ every 24 hours - + github - + GitHub @@ -462,9 +471,9 @@ on commit - + jekyll - + Jekyll @@ -478,9 +487,9 @@ Build website - + netlify_cdn - + Netlify CDN @@ -496,9 +505,9 @@ website files - + website - + Yak Collective @@ -515,9 +524,9 @@ Cloudfront - + featured_yak - + "Featured Yak" @@ -581,8 +590,8 @@ create_post->discord - - + + Post in #yaktalk-content @@ -595,9 +604,9 @@ member post - + namecheap - + Namecheap @@ -611,25 +620,25 @@ DNS information - + knack - - -Knack + + +Knack - + roam - - -Roam + + +Roam - + visitor @@ -640,7 +649,7 @@ Website visitor - + developer From 326a2c61f763ef9d7123fad561f66f6dfe72d1b6 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sun, 13 Dec 2020 13:06:08 -0700 Subject: [PATCH 13/21] Gmail isn't being used anymore, just Google Calendar API --- infrastructure.dot | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index a176f65..b1f65fe 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -23,7 +23,6 @@ digraph yak_infrastructure { labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"; color = "gray"; - gmail INTERNAL_SERVICE [label = "Gmail"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/bRd-QWJA0"]; google_analytics INTERNAL_SERVICE [label = "Google\nAnalytics"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; google_calendar STATIC_DATA [label = "Google\nCalendar"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; registration_form STATIC_DATA [label = "Registration\nForm"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; @@ -172,7 +171,6 @@ digraph yak_infrastructure { google_calendar -> zapier AUTO_DATA [label = "Pulled by\nZapier"]; zapier -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; - google_calendar -> gmail AUTO_DATA [label = "Notification and\nagenda emails"]; - gmail -> calendar_yak AUTO_DATA [label = "Gmail\nAPI"]; + google_calendar -> calendar_yak AUTO_DATA [label = "Google Calendar\nAPI"]; calendar_yak -> discord AUTO_DATA [label = "Post in\n#events"]; } From 7328c9c6b1b36b573fd1788d572bd4255c60c04b Mon Sep 17 00:00:00 2001 From: necopinus Date: Sun, 13 Dec 2020 20:07:24 +0000 Subject: [PATCH 14/21] Updated infrastructure diagram SVG --- infrastructure.svg | 647 ++++++++++++++++++++++----------------------- 1 file changed, 315 insertions(+), 332 deletions(-) diff --git a/infrastructure.svg b/infrastructure.svg index f41e9a7..9cb4d65 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -4,660 +4,643 @@ - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot cluster_vultr - -Vultr + +Vultr cluster_carl - -Carl + +Carl cluster_unused - -Unused + +Unused cluster_ifttt - -IFTTT + +IFTTT cluster_netlify - -Netlify + +Netlify cluster_cloudfront - -Amazon Cloudfront + +Amazon Cloudfront cluster_lambda - -Amazon Lambda - - - -gmail - - -Gmail - - - - - -calendar_yak - - -Calendar Yak - - - - - -gmail->calendar_yak - - -Gmail -API + +Amazon Lambda - + google_analytics - - -Google -Analytics + + +Google +Analytics - + google_calendar - - - -Google -Calendar + + + +Google +Calendar - - -google_calendar->gmail - - -Notification and -agenda emails - - + zapier - - -Zapier + + +Zapier google_calendar->zapier - - -Pulled by -Zapier + + +Pulled by +Zapier + + + +calendar_yak + + +Calendar Yak + + + + + +google_calendar->calendar_yak + + +Google Calendar +API - + registration_form - - - -Registration -Form + + + +Registration +Form - + discord - - -Discord + + +Discord registration_form->discord - - -Invite link + + +Invite link - + reboot_deck - - - -"Don't Waste the -Reboot" deck + + + +"Don't Waste the +Reboot" deck - + home_deck - - - -"The New Old -Home" deck + + + +"The New Old +Home" deck - + twitter - - -Twitter + + +Twitter zapier->twitter - - -Tweet about -new content + + +Tweet about +new content - + calendar_yak->discord - - -Post in -#events + + +Post in +#events - + yak_scraper - - -yak_scraper + + +yak_scraper yak_scraper->discord - - -Requested info or -acknowledgement + + +Requested info or +acknowledgement - + gigayak - - -gigayak + + +gigayak gigayak->discord - - -Requested info or -acknowledgement + + +Requested info or +acknowledgement - + welcome_bot - - -welcome_bot + + +welcome_bot welcome_bot->discord - - -Welcome message -series + + +Welcome message +series - + yakyak - - -yakyak + + +yakyak yakyak->discord - - -Prune inactive -users + + +Prune inactive +users discord->yak_scraper - - -User -command + + +User +command discord->gigayak - - -User -command + + +User +command discord->welcome_bot - - -New user -notification / data + + +New user +notification / data discord->yakyak - - -New user -notification / data + + +New user +notification / data - + substack - - -Substack + + +Substack - + rss_applet - - -create-post -Applets + + +create-post +Applets substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + twitter_applets - - -Twitter -Applets + + +Twitter +Applets substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + member_feeds - - - -Member RSS -Feeds + + + +Member RSS +Feeds member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + facebook - - -Facebook + + +Facebook - + linkedin - - -LinkedIn + + +LinkedIn - + glitch - - -Glitch + + +Glitch - + create_post - - -create-post + + +create-post rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content - + netlify_applet - - -Netlify Build -Hook Applet + + +Netlify Build +Hook Applet - + netlify_ci - - -Netlify Continuous -Integration + + +Netlify Continuous +Integration netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours - + github - - -GitHub + + +GitHub github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit - + jekyll - - -Jekyll + + +Jekyll netlify_ci->jekyll - - -Build website + + +Build website - + netlify_cdn - - -Netlify -CDN + + +Netlify +CDN jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files - + website - - - -Yak Collective -Website + + + +Yak Collective +Website netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + featured_yak - - - -"Featured Yak" -RSS Feed + + + +"Featured Yak" +RSS Feed netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics + + +Visitor analytics website->registration_form - - -Sign up form -(minimal data) + + +Sign up form +(minimal data) website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content create_post->github - - -Commit new -member post + + +Commit new +member post - + namecheap - - -Namecheap + + +Namecheap namecheap->netlify_cdn - - -DNS information + + +DNS information - + knack - - -Knack + + +Knack - + roam - - -Roam + + +Roam - + visitor visitor->website - - -Website visitor + + +Website visitor - + developer developer->github - - -Git commit + + +Git commit From 1e3102fcfda9ee994882b6695fb1d0b8fb9438e6 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sat, 4 Dec 2021 17:28:16 -0700 Subject: [PATCH 15/21] Updated infrastructure map for the 2021 annual meeting --- infrastructure.dot | 78 ++-- infrastructure.svg | 860 +++++++++++++++++++++++++-------------------- macros.sed | 1 + 3 files changed, 538 insertions(+), 401 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index b1f65fe..6b27b60 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -25,36 +25,36 @@ digraph yak_infrastructure { google_analytics INTERNAL_SERVICE [label = "Google\nAnalytics"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/gkim0kNQ8"]; google_calendar STATIC_DATA [label = "Google\nCalendar"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; - registration_form STATIC_DATA [label = "Registration\nForm"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/oG9FwDcRH"]; } reboot_deck STATIC_DATA [label = "\"Don't Waste the\nReboot\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/s7km8fEQp"]; home_deck STATIC_DATA [label = "\"The New Old\nHome\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/sGxc8YzrD"]; } - zapier INTERNAL_SERVICE [label = "Zapier"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; - subgraph cluster_vultr { labelloc = "t"; label = "Vultr"; labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/WpgCSZdjg"; color = "gray"; - calendar_yak APPLET [label = "Calendar Yak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/h8CetC_Re"]; - yak_scraper APPLET [label = "yak_scraper"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AaFxsbkdW"]; gigayak APPLET [label = "gigayak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/_1voFfg7g"]; - } + iamz1 APPLET [label = "IamZ1"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/SvvXQHcP-"]; + project_ui APPLET [label = "Project_UI"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/6F1F3oaNT"]; + yak_scraper APPLET [label = "Shepherd / \nyak_scraper"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AaFxsbkdW"]; - subgraph cluster_carl { - labelloc = "t"; - label = "Carl"; - labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"; - color = "gray"; + subgraph cluster_vultr_unused { + labelloc = "t"; + label = "Unused"; + color = "gray"; - welcome_bot APPLET [label = "welcome_bot"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/S_Xkw1vVi"]; - yakyak APPLET [label = "yakyak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/Q1LoZ_dE4"]; + yakdate APPLET [label = "yakdate"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/h8CetC_Re"]; + } } + carl APPLET [label = "Carl"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"]; + + bookmarker APPLET [label = "Bookmarker"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/olyafjy4D"]; + discord EXTERNAL_SERVICE [label = "Discord"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; substack EXTERNAL_SERVICE [label = "Substack"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/kMaCo6Xc-"]; @@ -62,15 +62,22 @@ digraph yak_infrastructure { member_feeds STATIC_DATA [label = "Member RSS\nFeeds"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; twitter EXTERNAL_SERVICE [label = "Twitter"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; - facebook EXTERNAL_SERVICE [label = "Facebook"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; - linkedin EXTERNAL_SERVICE [label = "LinkedIn"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; + + z1 HARDWARE [label = "Wonderful\nWandering\nGrowth"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/lLs7Ev9Pd"]; subgraph cluster_unused { labelloc = "t"; label = "Unused"; color = "gray"; + facebook EXTERNAL_SERVICE [label = "Facebook"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WZKSWTGz5"]; glitch INTERNAL_SERVICE [label = "Glitch"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/bTxU0ABQS"]; + linkedin EXTERNAL_SERVICE [label = "LinkedIn"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/M17w4lZJB"]; + zapier INTERNAL_SERVICE [label = "Zapier"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/WW4JidMuQ"]; + + integromat INTERNAL_SERVICE [label = "Integromat"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ExYczJs8u"]; + + welcomer APPLET [label = "Welcomer"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/6EFGxN2M8"]; } subgraph cluster_ifttt { @@ -115,9 +122,15 @@ digraph yak_infrastructure { } namecheap INTERNAL_SERVICE [label = "Namecheap"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/SrB_NQUiU"]; + + cloudinary INTERNAL_SERVICE [label = "Cloudinary"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/aZug23GyY"]; + knack EXTERNAL_SERVICE [label = "Knack"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/FDjmLsCeR"]; + roam EXTERNAL_SERVICE [label = "Roam"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; + mirror EXTERNAL_SERVICE [label = "Mirror.xyz"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wTZFaIrwc"]; + # Hidden user interaction nodes # visitor [shape = plaintext] [label = ""]; @@ -131,27 +144,37 @@ digraph yak_infrastructure { # Member registration flow # visitor -> website USER_DATA [label = "Website visitor"]; - website -> registration_form USER_DATA [label = "Sign up form\n(minimal data)"]; - registration_form -> discord USER_DATA [label = "Invite link"]; - discord -> {welcome_bot, yakyak} AUTO_DATA [label = "New user\nnotification / data"]; - welcome_bot -> discord AUTO_DATA [label = "Welcome message\nseries"]; - yakyak -> discord AUTO_DATA [label = "Prune inactive\nusers"]; + website -> knack USER_DATA [label = "Sign up form\n(minimal data)"]; + knack -> discord USER_DATA [label = "Invite link"]; # Member interactions # - discord -> {gigayak, yak_scraper} USER_DATA [label = "User\ncommand"]; + discord -> {bookmarker, carl} AUTO_DATA [label = "Command"]; + {bookmarker, carl} -> discord AUTO_DATA [label = "Response"]; + + discord -> {gigayak, iamz1, yak_scraper} USER_DATA [label = "User\ncommand"]; {gigayak, yak_scraper} -> discord USER_DATA [label = "Requested info or\nacknowledgement"]; + iamz1 -> z1 USER_DATA [label = "Rover command"]; + yak_scraper -> twitter USER_DATA [label = "$yaktweet"]; + + discord -> project_ui AUTO_DATA [label = "Channel\ninformation"]; + project_ui -> discord AUTO_DATA [label = "Build\n#project-notifications"]; + + gigayak -> discord USER_DATA [label = "Build\n#gig-list"]; # Building the website # developer -> github USER_DATA [label = "Git commit"]; github -> netlify_ci AUTO_DATA [label = "Repo contents pushed\non commit"]; netlify_applet -> netlify_ci AUTO_DATA [label = "Trigger rebuild\nevery 24 hours"]; + knack -> netlify_ci AUTO_DATA [label = "Pull member data\nduring build process"]; netlify_ci -> jekyll AUTO_DATA [label = "Build website"]; jekyll -> netlify_cdn AUTO_DATA [label = "Optimize & deploy\nwebsite files"]; - namecheap -> netlify_cdn AUTO_DATA [label = "DNS information"]; + namecheap -> website USER_DATA [label = "DNS information"]; netlify_cdn -> {website, featured_yak} AUTO_DATA [label = "Push to Amazon\nCloudfront"]; netlify_cdn -> create_post AUTO_DATA [label = "Create Amazon\nLambda function"]; + knack -> cloudinary AUTO_DATA [label = "Image\nprocessing"]; + cloudinary -> website USER_DATA [label = "Serve images\nto visitors"]; # Various RSS feeds to the website/Discord # @@ -166,11 +189,12 @@ digraph yak_infrastructure { featured_yak -> twitter_applets AUTO_DATA [label = "Pulled\nby IFTTT"]; twitter_applets -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; - # Google Calendar -> Twitter/Discord + # Google Calendar -> Discord # - google_calendar -> zapier AUTO_DATA [label = "Pulled by\nZapier"]; - zapier -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; + google_calendar -> project_ui AUTO_DATA [label = "Google Calendar\nAPI"]; + project_ui -> discord AUTO_DATA [label = "Post in\n#events-this-week"]; - google_calendar -> calendar_yak AUTO_DATA [label = "Google Calendar\nAPI"]; - calendar_yak -> discord AUTO_DATA [label = "Post in\n#events"]; + # Backup + # + roam -> github AUTO_DATA [label = "Nightly backup"]; } diff --git a/infrastructure.svg b/infrastructure.svg index 9cb4d65..e3a3db6 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -1,67 +1,67 @@ - - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot cluster_vultr - -Vultr + +Vultr -cluster_carl - -Carl +cluster_vultr_unused + +Unused cluster_unused - -Unused + +Unused cluster_ifttt - -IFTTT + +IFTTT cluster_netlify - -Netlify + +Netlify cluster_cloudfront - -Amazon Cloudfront + +Amazon Cloudfront cluster_lambda - -Amazon Lambda + +Amazon Lambda google_analytics - -Google -Analytics + +Google +Analytics @@ -69,55 +69,58 @@ google_calendar - - -Google -Calendar + + +Google +Calendar - - -zapier - - -Zapier + + +project_ui + + +Project_UI - - -google_calendar->zapier - - -Pulled by -Zapier + + +google_calendar->project_ui + + +Google Calendar +API - - -calendar_yak - - -Calendar Yak + + +reboot_deck + + + +"Don't Waste the +Reboot" deck - - -google_calendar->calendar_yak - - -Google Calendar -API + + +home_deck + + + +"The New Old +Home" deck + - - -registration_form - - - -Registration -Form + + + +gigayak + + +gigayak @@ -125,522 +128,631 @@ discord - -Discord + +Discord - - -registration_form->discord - - -Invite link - - - -reboot_deck - - - -"Don't Waste the -Reboot" deck - + + +gigayak->discord + + +Requested info or +acknowledgement + + +gigayak->discord + + +Build +#gig-list - - -home_deck - - - -"The New Old -Home" deck + + +iamz1 + + +IamZ1 - - -twitter - - -Twitter + + +z1 + + +Wonderful +Wandering +Growth - - -zapier->twitter - - -Tweet about -new content + + +iamz1->z1 + + +Rover command - - -calendar_yak->discord - - -Post in -#events + + +project_ui->discord + + +Build +#project-notifications + + + +project_ui->discord + + +Post in +#events-this-week yak_scraper - - -yak_scraper + + +Shepherd / +yak_scraper - + yak_scraper->discord - - -Requested info or -acknowledgement + + +Requested info or +acknowledgement - - -gigayak - - -gigayak + + +twitter + + +Twitter - - -gigayak->discord - - -Requested info or -acknowledgement + + +yak_scraper->twitter + + +$yaktweet - + + +yakdate + + +yakdate + + + + -welcome_bot - - -welcome_bot +carl + + +Carl - + -welcome_bot->discord - - -Welcome message -series +carl->discord + + +Response - + -yakyak - - -yakyak +bookmarker + + +Bookmarker - + -yakyak->discord - - -Prune inactive -users +bookmarker->discord + + +Response - + -discord->yak_scraper - - -User -command +discord->gigayak + + +User +command - + -discord->gigayak - - -User -command +discord->iamz1 + + +User +command - + + +discord->project_ui + + +Channel +information + + + +discord->yak_scraper + + +User +command + + -discord->welcome_bot - - -New user -notification / data +discord->carl + + +Command - + -discord->yakyak - - -New user -notification / data +discord->bookmarker + + +Command substack - -Substack + +Substack - + rss_applet - - -create-post -Applets + + +create-post +Applets - + substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + twitter_applets - - -Twitter -Applets + + +Twitter +Applets - + substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT member_feeds - - -Member RSS -Feeds + + +Member RSS +Feeds - + member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + facebook - - -Facebook + + +Facebook + + + + + +glitch + + +Glitch - + linkedin - - -LinkedIn + + +LinkedIn - - -glitch - - -Glitch + + +zapier + + +Zapier + + + + + +integromat + + +Integromat + + + + + +welcomer + + +Welcomer - + create_post - - -create-post + + +create-post - + rss_applet->create_post - - -RSS post data -to webhook + + +RSS post data +to webhook - + twitter_applets->twitter - - -Tweet about -new content + + +Tweet about +new content - + netlify_applet - - -Netlify Build -Hook Applet + + +Netlify Build +Hook Applet - + netlify_ci - - -Netlify Continuous -Integration + + +Netlify Continuous +Integration - + netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours - + github - - -GitHub + + +GitHub - + github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit - + jekyll - - -Jekyll + + +Jekyll - + netlify_ci->jekyll - - -Build website + + +Build website - + netlify_cdn - - -Netlify -CDN + + +Netlify +CDN - + jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files - + website - - - -Yak Collective -Website + + + +Yak Collective +Website - + netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + featured_yak - - - -"Featured Yak" -RSS Feed + + + +"Featured Yak" +RSS Feed - + netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics - - - -website->registration_form - - -Sign up form -(minimal data) + + +Visitor analytics website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF + + + +knack + + +Knack + + + + + +website->knack + + +Sign up form +(minimal data) - + featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content - + create_post->github - - -Commit new -member post + + +Commit new +member post - + namecheap - - -Namecheap + + +Namecheap - - -namecheap->netlify_cdn - - -DNS information - - - -knack - - -Knack + + +namecheap->website + + +DNS information + + + +cloudinary + + +Cloudinary + + +cloudinary->website + + +Serve images +to visitors + + + +knack->discord + + +Invite link + + + +knack->netlify_ci + + +Pull member data +during build process + + + +knack->cloudinary + + +Image +processing + - + roam - - -Roam + + +Roam + + + + + +roam->github + + +Nightly backup + + + +mirror + + +Mirror.xyz - + visitor visitor->website - - -Website visitor + + +Website visitor - + developer - + developer->github - - -Git commit + + +Git commit diff --git a/macros.sed b/macros.sed index 969bf98..f89aad4 100644 --- a/macros.sed +++ b/macros.sed @@ -2,5 +2,6 @@ s/STATIC_DATA/[shape = doublecircle] [color = green]/ # Website or service that s/EXTERNAL_SERVICE/[shape = egg] [color = green]/ # Externally-facing web service used by YC members/participants (and sometimes others) s/INTERNAL_SERVICE/[shape = egg] [color = blue]/ # Internally-facing web service used by few YC members (sometimes not accessible at all) s/APPLET/[shape = rectangle] [color = blue]/ # A function, service applet, or internal tool; contained by and run by some service +s/HARDWARE/[shape = trapezium] [color = black]/ # Physical hardware of some kind s/USER_DATA/[color = red]/ # Manual data flow (someone creates an account, reviews a list and takes action, etc.) s/AUTO_DATA/[color = black]/ # Automatic data flows (service takes action based on a timer, webhook, etc.) From 8fb8392f9c05d03483c185b921864025cea40433 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sun, 5 Dec 2021 17:14:50 -0700 Subject: [PATCH 16/21] Updated README.md to match Roam page --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8360d0e..85f5232 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Prototype documentation tool for [Yak Collective](https://yakcollective.org) [IT | Green Oval | `EXTERNAL_SERVICE` | Externally-facing web service used by YC members/participants (and sometimes others) | | Blue Oval | `INTERNAL_SERVICE` | Internally-facing web service used by few YC members (sometimes not accessible at all) | | Blue Rectangle | `APPLET` | A function, service applet, or internal tool; contained by and run by some service | +| Black Trapezoid | `HARDWARE` | Physical hardware (robot, etc.) | | Red Line | `USER_DATA` | Manual data flow (someone creates an account, reviews a list and takes action, etc.) | | Black Line | `AUTO_DATA` | Automatic data flows (service takes action based on a timer, webhook, etc.) | From 4afb50b4f3fcc20e6247943bf2f7a7aa0b2e844b Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sat, 11 Dec 2021 08:54:00 -0700 Subject: [PATCH 17/21] Remove extra spaces --- infrastructure.dot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index 6b27b60..0fbb6b7 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -133,8 +133,8 @@ digraph yak_infrastructure { # Hidden user interaction nodes # - visitor [shape = plaintext] [label = ""]; - developer [shape = plaintext] [label = ""]; + visitor [shape = plaintext] [label = ""]; + developer [shape = plaintext] [label = ""]; # Website data flows to Google # From 80f637360f8464b1e8104a5415685521a30a89aa Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sat, 11 Dec 2021 12:32:26 -0700 Subject: [PATCH 18/21] Internal services vs. Applets --- infrastructure.dot | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index 0fbb6b7..217444f 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -51,9 +51,9 @@ digraph yak_infrastructure { } } - carl APPLET [label = "Carl"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"]; + carl INTERNAL_SERVICE [label = "Carl"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"]; - bookmarker APPLET [label = "Bookmarker"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/olyafjy4D"]; + bookmarker INTERNAL_SERVICE [label = "Bookmarker"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/olyafjy4D"]; discord EXTERNAL_SERVICE [label = "Discord"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; @@ -77,7 +77,7 @@ digraph yak_infrastructure { integromat INTERNAL_SERVICE [label = "Integromat"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ExYczJs8u"]; - welcomer APPLET [label = "Welcomer"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/6EFGxN2M8"]; + welcomer INTERNAL_SERVICE [label = "Welcomer"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/6EFGxN2M8"]; } subgraph cluster_ifttt { From 9b32762627f2789c8b7b4e00b9e36c37602c32fc Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sat, 11 Dec 2021 14:37:29 -0700 Subject: [PATCH 19/21] yak_scaper handles #events-this-week, not project_ui --- infrastructure.dot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure.dot b/infrastructure.dot index 217444f..a4e359d 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -191,8 +191,8 @@ digraph yak_infrastructure { # Google Calendar -> Discord # - google_calendar -> project_ui AUTO_DATA [label = "Google Calendar\nAPI"]; - project_ui -> discord AUTO_DATA [label = "Post in\n#events-this-week"]; + google_calendar -> yak_scraper AUTO_DATA [label = "Google Calendar\nAPI"]; + yak_scraper -> discord AUTO_DATA [label = "Post in\n#events-this-week"]; # Backup # From 516debd518d431e621d56fce40e7c15dd862f766 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Sat, 11 Dec 2021 15:22:41 -0700 Subject: [PATCH 20/21] Updated infrastructure map based on conversations with Maier and Jenna --- README.md | 1 - infrastructure.dot | 66 ++- infrastructure.svg | 972 +++++++++++++++++++++++++-------------------- macros.sed | 1 - 4 files changed, 590 insertions(+), 450 deletions(-) diff --git a/README.md b/README.md index 85f5232..8360d0e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ Prototype documentation tool for [Yak Collective](https://yakcollective.org) [IT | Green Oval | `EXTERNAL_SERVICE` | Externally-facing web service used by YC members/participants (and sometimes others) | | Blue Oval | `INTERNAL_SERVICE` | Internally-facing web service used by few YC members (sometimes not accessible at all) | | Blue Rectangle | `APPLET` | A function, service applet, or internal tool; contained by and run by some service | -| Black Trapezoid | `HARDWARE` | Physical hardware (robot, etc.) | | Red Line | `USER_DATA` | Manual data flow (someone creates an account, reviews a list and takes action, etc.) | | Black Line | `AUTO_DATA` | Automatic data flows (service takes action based on a timer, webhook, etc.) | diff --git a/infrastructure.dot b/infrastructure.dot index a4e359d..fa386df 100644 --- a/infrastructure.dot +++ b/infrastructure.dot @@ -27,8 +27,38 @@ digraph yak_infrastructure { google_calendar STATIC_DATA [label = "Google\nCalendar"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/5JAKKBvdi"]; } - reboot_deck STATIC_DATA [label = "\"Don't Waste the\nReboot\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/s7km8fEQp"]; - home_deck STATIC_DATA [label = "\"The New Old\nHome\" deck"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/sGxc8YzrD"]; + reboot_deck STATIC_DATA [label = "\"Don't Waste the\nReboot\" deck"] [URL = "https://docs.google.com/presentation/d/1OfBuSq4SImE1Gq2EaAGCAlkwC8LZRCWx-7O_VOHJ5TI/edit"]; + home_deck STATIC_DATA [label = "\"The New Old\nHome\" deck"] [URL = "https://docs.google.com/presentation/d/1Bgs4e6YIEydMot0VM4lf-onZM2z6Zei3n87f3JHCeSk/edit"]; + } + + subgraph cluster_mirror { + labelloc = "t"; + label = "Mirror.xyz"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/wTZFaIrwc"; + color = "gray"; + + ogs_paper STATIC_DATA [label = "The Art of\nOnline Governance"]; + } + + subgraph cluster_rovers { + labelloc = "t"; + label = "Yak Rovers"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/QmE-vAzPn"; + color = "gray"; + + iamz1 APPLET [label = "IamZ1"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/UJJ21SsLC"]; + rover_twitter APPLET [label = "Rover-Twitter"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/SIgMI9pV7"]; + pagekite_backend APPLET [label = "Pagekite\n(backend)"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/rQBs_dFEE"]; + } + + subgraph cluster_twitter { + labelloc = "t"; + label = "Twitter"; + labelURL = "https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"; + color = "gray"; + + yc_twitter APPLET [label = "@yak_collective"] [URL = "https://twitter.com/yak_collective"]; + yak_rovers_twitter APPLET [label = "@RoversYak"] [URL = "https://twitter.com/RoversYak"]; } subgraph cluster_vultr { @@ -38,9 +68,9 @@ digraph yak_infrastructure { color = "gray"; gigayak APPLET [label = "gigayak"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/_1voFfg7g"]; - iamz1 APPLET [label = "IamZ1"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/SvvXQHcP-"]; project_ui APPLET [label = "Project_UI"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/6F1F3oaNT"]; yak_scraper APPLET [label = "Shepherd / \nyak_scraper"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AaFxsbkdW"]; + pagekite_frontend APPLET [label = "Pagekite\n(frontend)"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/6BNamvVZb"]; subgraph cluster_vultr_unused { labelloc = "t"; @@ -53,6 +83,8 @@ digraph yak_infrastructure { carl INTERNAL_SERVICE [label = "Carl"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wfmK-RIl1"]; + unbelievaboat INTERNAL_SERVICE [label = "UnbelievaBoat"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/V0Psko_9g"]; + bookmarker INTERNAL_SERVICE [label = "Bookmarker"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/olyafjy4D"]; discord EXTERNAL_SERVICE [label = "Discord"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/AsI1N4yGZ"]; @@ -61,10 +93,6 @@ digraph yak_infrastructure { member_feeds STATIC_DATA [label = "Member RSS\nFeeds"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/RLF445t5m"]; - twitter EXTERNAL_SERVICE [label = "Twitter"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/ssp9sORuP"]; - - z1 HARDWARE [label = "Wonderful\nWandering\nGrowth"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/lLs7Ev9Pd"]; - subgraph cluster_unused { labelloc = "t"; label = "Unused"; @@ -129,17 +157,17 @@ digraph yak_infrastructure { roam EXTERNAL_SERVICE [label = "Roam"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/FEPWC0DLJ"]; - mirror EXTERNAL_SERVICE [label = "Mirror.xyz"] [URL = "https://roamresearch.com/#/app/ArtOfGig/page/wTZFaIrwc"]; - # Hidden user interaction nodes # visitor [shape = plaintext] [label = ""]; developer [shape = plaintext] [label = ""]; + driver [shape = plaintext] [label = ""]; # Website data flows to Google # website -> google_analytics AUTO_DATA [label = "Visitor analytics"]; website -> {reboot_deck, home_deck} USER_DATA [label = "Google Slides / PDF"]; + website -> ogs_paper USER_DATA [label = "Mirror\npublication"]; # Member registration flow # @@ -149,19 +177,27 @@ digraph yak_infrastructure { # Member interactions # - discord -> {bookmarker, carl} AUTO_DATA [label = "Command"]; - {bookmarker, carl} -> discord AUTO_DATA [label = "Response"]; + discord -> {bookmarker, carl, unbelievaboat} AUTO_DATA [label = "Command"]; + {bookmarker, carl, unbelievaboat} -> discord AUTO_DATA [label = "Response"]; - discord -> {gigayak, iamz1, yak_scraper} USER_DATA [label = "User\ncommand"]; + discord -> {gigayak, yak_scraper} USER_DATA [label = "User\ncommand"]; {gigayak, yak_scraper} -> discord USER_DATA [label = "Requested info or\nacknowledgement"]; - iamz1 -> z1 USER_DATA [label = "Rover command"]; - yak_scraper -> twitter USER_DATA [label = "$yaktweet"]; + yak_scraper -> yc_twitter USER_DATA [label = "$yaktweet"]; discord -> project_ui AUTO_DATA [label = "Channel\ninformation"]; project_ui -> discord AUTO_DATA [label = "Build\n#project-notifications"]; gigayak -> discord USER_DATA [label = "Build\n#gig-list"]; + # Yak rovers + # + discord -> iamz1 USER_DATA [label = "Rover command"]; + iamz1 -> discord USER_DATA [label = "Rover response"]; + rover_twitter -> yak_rovers_twitter AUTO_DATA [label = "Rover status"]; + driver -> pagekite_frontend USER_DATA [label = "Rover\nAPI call"]; + pagekite_frontend -> pagekite_backend USER_DATA [label = "Rover\nAPI call"]; + pagekite_backend -> pagekite_frontend USER_DATA [label = "Rover API\nresponse"]; + # Building the website # developer -> github USER_DATA [label = "Git commit"]; @@ -187,7 +223,7 @@ digraph yak_infrastructure { # {member_feeds, substack} -> twitter_applets USER_DATA [label = "Pulled\nby IFTTT"]; featured_yak -> twitter_applets AUTO_DATA [label = "Pulled\nby IFTTT"]; - twitter_applets -> twitter AUTO_DATA [label = "Tweet about\nnew content"]; + twitter_applets -> yc_twitter AUTO_DATA [label = "Tweet about\nnew content"]; # Google Calendar -> Discord # diff --git a/infrastructure.svg b/infrastructure.svg index e3a3db6..91e3afa 100644 --- a/infrastructure.svg +++ b/infrastructure.svg @@ -4,64 +4,79 @@ - - + + yak_infrastructure - -Yak Collective IT Infrastructure + +Yak Collective IT Infrastructure cluster_google - -Google + +Google cluster_robot - -Yak Collective Robot + +Yak Collective Robot -cluster_vultr - -Vultr +cluster_mirror + +Mirror.xyz -cluster_vultr_unused - -Unused +cluster_rovers + +Yak Rovers -cluster_unused - -Unused +cluster_twitter + +Twitter -cluster_ifttt - -IFTTT +cluster_vultr + +Vultr -cluster_netlify - -Netlify +cluster_vultr_unused + +Unused -cluster_cloudfront - -Amazon Cloudfront +cluster_unused + +Unused +cluster_ifttt + +IFTTT + + +cluster_netlify + +Netlify + + +cluster_cloudfront + +Amazon Cloudfront + + cluster_lambda - -Amazon Lambda + +Amazon Lambda google_analytics - -Google -Analytics + +Google +Analytics @@ -69,690 +84,781 @@ google_calendar - - -Google -Calendar + + +Google +Calendar - - -project_ui - - -Project_UI + + +yak_scraper + + +Shepherd / +yak_scraper - - -google_calendar->project_ui - - -Google Calendar -API + + +google_calendar->yak_scraper + + +Google Calendar +API reboot_deck - - - -"Don't Waste the -Reboot" deck + + + +"Don't Waste the +Reboot" deck home_deck - - - -"The New Old -Home" deck + + + +"The New Old +Home" deck - + -gigayak - - -gigayak +ogs_paper + + +The Art of +Online Governance + + + +iamz1 + + +IamZ1 - + discord - - -Discord + + +Discord - - -gigayak->discord - - -Requested info or -acknowledgement + + +iamz1->discord + + +Rover response - - -gigayak->discord - - -Build -#gig-list + + +rover_twitter + + +Rover-Twitter + - - -iamz1 - - -IamZ1 + + + +yak_rovers_twitter + + +@RoversYak - - -z1 - - -Wonderful -Wandering -Growth + + +rover_twitter->yak_rovers_twitter + + +Rover status + + + +pagekite_backend + + +Pagekite +(backend) - - -iamz1->z1 - - -Rover command + + +pagekite_frontend + + +Pagekite +(frontend) + - - -project_ui->discord - - -Build -#project-notifications - - -project_ui->discord - - -Post in -#events-this-week + + +pagekite_backend->pagekite_frontend + + +Rover API +response - - -yak_scraper - - -Shepherd / -yak_scraper + + +yc_twitter + + +@yak_collective - - -yak_scraper->discord - - -Requested info or -acknowledgement + + +gigayak + + +gigayak + - - -twitter - - -Twitter + + + +gigayak->discord + + +Requested info or +acknowledgement + + + +gigayak->discord + + +Build +#gig-list + + + +project_ui + + +Project_UI - + + +project_ui->discord + + +Build +#project-notifications + + + +yak_scraper->yc_twitter + + +$yaktweet + + -yak_scraper->twitter - - -$yaktweet +yak_scraper->discord + + +Requested info or +acknowledgement + + + +yak_scraper->discord + + +Post in +#events-this-week + + + +pagekite_frontend->pagekite_backend + + +Rover +API call - + yakdate - - -yakdate + + +yakdate - + carl - - -Carl + + +Carl - + carl->discord - - -Response + + +Response + + + +unbelievaboat + + +UnbelievaBoat + + + + + +unbelievaboat->discord + + +Response - + bookmarker - - -Bookmarker + + +Bookmarker - + bookmarker->discord - - -Response - - - -discord->gigayak - - -User -command + + +Response - + discord->iamz1 - - -User -command + + +Rover command + + + +discord->gigayak + + +User +command - + discord->project_ui - - -Channel -information + + +Channel +information - + discord->yak_scraper - - -User -command + + +User +command - + discord->carl - - -Command + + +Command + + + +discord->unbelievaboat + + +Command - + discord->bookmarker - - -Command + + +Command - + substack - - -Substack + + +Substack - + rss_applet - - -create-post -Applets + + +create-post +Applets - + substack->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + twitter_applets - - -Twitter -Applets + + +Twitter +Applets - + substack->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + member_feeds - - - -Member RSS -Feeds + + + +Member RSS +Feeds - + member_feeds->rss_applet - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + member_feeds->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + facebook - - -Facebook + + +Facebook - + glitch - - -Glitch + + +Glitch - + linkedin - - -LinkedIn + + +LinkedIn - + zapier - - -Zapier + + +Zapier - + integromat - - -Integromat + + +Integromat - + welcomer - - -Welcomer + + +Welcomer - + create_post - - -create-post + + +create-post - + rss_applet->create_post - - -RSS post data -to webhook - - - -twitter_applets->twitter - - -Tweet about -new content + + +RSS post data +to webhook + + + +twitter_applets->yc_twitter + + +Tweet about +new content - + netlify_applet - - -Netlify Build -Hook Applet + + +Netlify Build +Hook Applet - + netlify_ci - - -Netlify Continuous -Integration + + +Netlify Continuous +Integration - + netlify_applet->netlify_ci - - -Trigger rebuild -every 24 hours + + +Trigger rebuild +every 24 hours - + github - - -GitHub + + +GitHub - + github->netlify_ci - - -Repo contents pushed -on commit + + +Repo contents pushed +on commit - + jekyll - - -Jekyll + + +Jekyll - + netlify_ci->jekyll - - -Build website + + +Build website - + netlify_cdn - - -Netlify -CDN + + +Netlify +CDN - + jekyll->netlify_cdn - - -Optimize & deploy -website files + + +Optimize & deploy +website files - + website - - - -Yak Collective -Website + + + +Yak Collective +Website - + netlify_cdn->website - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + featured_yak - - - -"Featured Yak" -RSS Feed + + + +"Featured Yak" +RSS Feed - + netlify_cdn->featured_yak - - -Push to Amazon -Cloudfront + + +Push to Amazon +Cloudfront - + netlify_cdn->create_post - - -Create Amazon -Lambda function + + +Create Amazon +Lambda function website->google_analytics - - -Visitor analytics + + +Visitor analytics website->reboot_deck - - -Google Slides / PDF + + +Google Slides / PDF website->home_deck - - -Google Slides / PDF + + +Google Slides / PDF + + + +website->ogs_paper + + +Mirror +publication - + knack - - -Knack + + +Knack - + website->knack - - -Sign up form -(minimal data) + + +Sign up form +(minimal data) - + featured_yak->twitter_applets - - -Pulled -by IFTTT + + +Pulled +by IFTTT - + create_post->discord - - -Post in -#yaktalk-content + + +Post in +#yaktalk-content - + create_post->github - - -Commit new -member post + + +Commit new +member post - + namecheap - - -Namecheap + + +Namecheap - + namecheap->website - - -DNS information + + +DNS information - + cloudinary - - -Cloudinary + + +Cloudinary - + cloudinary->website - - -Serve images -to visitors + + +Serve images +to visitors - + knack->discord - - -Invite link + + +Invite link - + knack->netlify_ci - - -Pull member data -during build process + + +Pull member data +during build process - + knack->cloudinary - - -Image -processing + + +Image +processing - + roam - - -Roam + + +Roam - + roam->github - - -Nightly backup - - - -mirror - - -Mirror.xyz - - + + +Nightly backup - + visitor - + visitor->website - - -Website visitor + + +Website visitor - + developer - + developer->github - - -Git commit + + +Git commit + + + +driver + + + +driver->pagekite_frontend + + +Rover +API call diff --git a/macros.sed b/macros.sed index f89aad4..969bf98 100644 --- a/macros.sed +++ b/macros.sed @@ -2,6 +2,5 @@ s/STATIC_DATA/[shape = doublecircle] [color = green]/ # Website or service that s/EXTERNAL_SERVICE/[shape = egg] [color = green]/ # Externally-facing web service used by YC members/participants (and sometimes others) s/INTERNAL_SERVICE/[shape = egg] [color = blue]/ # Internally-facing web service used by few YC members (sometimes not accessible at all) s/APPLET/[shape = rectangle] [color = blue]/ # A function, service applet, or internal tool; contained by and run by some service -s/HARDWARE/[shape = trapezium] [color = black]/ # Physical hardware of some kind s/USER_DATA/[color = red]/ # Manual data flow (someone creates an account, reviews a list and takes action, etc.) s/AUTO_DATA/[color = black]/ # Automatic data flows (service takes action based on a timer, webhook, etc.) From 271c554ec0be7e9d3d2b21ea7921dae6ab2ad9c2 Mon Sep 17 00:00:00 2001 From: Nathan Acks Date: Wed, 24 Jul 2024 09:04:49 -0600 Subject: [PATCH 21/21] Headings to sentence-case --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8360d0e..9ea7317 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Yak Collective IT Infrastructure Map +# Yak Collective IT infrastructure map Prototype documentation tool for [Yak Collective](https://yakcollective.org) [IT Infrastructure](https://roamresearch.com/#/app/ArtOfGig/page/6fhTlx1p_). -## Symbol Key +## Symbol key | Symbol | Macro | Meaning | |:-------------------:|:------------------:|:-------------------------------------------------------------------------------------- |