mirror of
https://github.com/foomo/foomo-docs.git
synced 2025-10-16 12:35:40 +00:00
1 line
7.4 KiB
JavaScript
1 line
7.4 KiB
JavaScript
"use strict";(self.webpackChunkfoomo=self.webpackChunkfoomo||[]).push([[8423],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),s=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(r),d=n,f=m["".concat(p,".").concat(d)]||m[d]||u[d]||a;return r?o.createElement(f,i(i({ref:t},c),{},{components:r})):o.createElement(f,i({ref:t},c))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var s=2;s<a;s++)i[s]=r[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}m.displayName="MDXCreateElement"},4991:(e,t,r)=>{r.d(t,{h:()=>n});var o=r(7294);const n=e=>{let{proportion:t,src:r}=e;return t||(t=4/3),e.style||(e.style={}),o.createElement("div",{style:{width:"100%",height:0,paddingTop:100/t+"%",position:"relative",float:"left",...e.style}},o.createElement("iframe",{style:{width:"100%",height:"100%",display:"block",position:"absolute",top:0,left:0},src:r,frameBorder:"0",scrolling:"no",allowFullScreen:!0}))}},9030:(e,t,r)=>{r.d(t,{k:()=>a});var o=r(7294);const n="undefined"==typeof localStorage,a=e=>{const[t,r]=(0,o.useState)((a=e.id,"undefined"!=typeof localStorage&&localStorage.getItem(a)));var a;return(0,o.useEffect)((()=>{console.log("well it is cool",e.id,{isCool:t,SSR:n})}),[t,n]),t?e.children:o.createElement("div",null,o.createElement("button",{className:"button button--lg button--secondary",onClick:t=>{localStorage.setItem(e.id,"yes"),r(!0)}},e.topic))}},9850:(e,t,r)=>{r.d(t,{O:()=>i});var o=r(7294),n=r(4991),a=r(9030);const i=e=>o.createElement(a.k,{topic:"load miro board from https://miro.com",id:"miroIsCool"},o.createElement(n.h,{style:{border:"3px solid black"},src:"https://miro.com/app/embed/"+e.id+"/?pres=1&autoplay=yep",proportion:.9*e.proportion}))},4782:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>p,toc:()=>c});var o=r(7462),n=(r(7294),r(3905)),a=r(9850);const i={id:"architecture",sidebar_label:"Architecture",sidebar_position:1},l="Architecture overview",p={unversionedId:"projects/architecture",id:"projects/architecture",title:"Architecture overview",description:"backend services",source:"@site/docs/projects/architecture.mdx",sourceDirName:"projects",slug:"/projects/architecture",permalink:"/docs/projects/architecture",draft:!1,editUrl:"https://github.com/foomo/foomo-docs/tree/main/foomo/docs/projects/architecture.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"architecture",sidebar_label:"Architecture",sidebar_position:1},sidebar:"projectsSidebar",previous:{title:"Intro",permalink:"/docs/projects/intro"},next:{title:"Intro",permalink:"/docs/projects/cms/intro"}},s={},c=[{value:"backend services",id:"backend-services",level:2},{value:"Foomo projects supporting development with Go",id:"foomo-projects-supporting-development-with-go",level:3},{value:"Frontends",id:"frontends",level:2},{value:"Foomo projects supporting development with Next.js",id:"foomo-projects-supporting-development-with-nextjs",level:3}],u={toc:c};function m(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"architecture-overview"},"Architecture overview"),(0,n.kt)("h2",{id:"backend-services"},"backend services"),(0,n.kt)("p",null,"When it comes to writing backend services we have decided for Go ",(0,n.kt)("a",{parentName:"p",href:"https://go.dev"},"https://go.dev")," - let me list the main reasons why - Go is:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"simple and fun "),(0,n.kt)("li",{parentName:"ul"},"fast when compiling"),(0,n.kt)("li",{parentName:"ul"},"fast at runtime"),(0,n.kt)("li",{parentName:"ul"},"friendly to your machines"),(0,n.kt)("li",{parentName:"ul"},"friendly to you as a programmer"),(0,n.kt)("li",{parentName:"ul"},"equipped with a top notch runtime"),(0,n.kt)("li",{parentName:"ul"},"extremely well balanced in its design as a language, that is highly consumable for humans and machines"),(0,n.kt)("li",{parentName:"ul"},"not about the features it has "),(0,n.kt)("li",{parentName:"ul"},"about what has been left out"),(0,n.kt)("li",{parentName:"ul"},"easy to read"),(0,n.kt)("li",{parentName:"ul"},"sustainable")),(0,n.kt)("h3",{id:"foomo-projects-supporting-development-with-go"},"Foomo projects supporting development with Go"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"libraries/keel"},"keel")," - opinionated way to run services"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"gotsrpc"},"gotsrpc")," - rpc framework / code generator"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"utilities/gograpple"},"gograpple")," - human friendly way to debug go programs running in k8s"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"webgrapple"},"webgrapple")," - a development proxy")),(0,n.kt)("h2",{id:"frontends"},"Frontends"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"TypeScript ",(0,n.kt)("a",{parentName:"li",href:"https://www.typescriptlang.org/"},"https://www.typescriptlang.org/")),(0,n.kt)("li",{parentName:"ul"},"Next.js ",(0,n.kt)("a",{parentName:"li",href:"https://nextjs.org/"},"https://nextjs.org/")),(0,n.kt)("li",{parentName:"ul"},"Styled components ",(0,n.kt)("a",{parentName:"li",href:"https://styled-components.com/"},"https://styled-components.com/")),(0,n.kt)("li",{parentName:"ul"},"Storybook ",(0,n.kt)("a",{parentName:"li",href:"https://storybook.js.org/"},"https://storybook.js.org/"))),(0,n.kt)("h3",{id:"foomo-projects-supporting-development-with-nextjs"},"Foomo projects supporting development with Next.js"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"gotsrpc"},"gotsrpc")," - rpc framework / code generator"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"webgrapple"},"webgrapple")," - a development proxy")),(0,n.kt)(a.O,{id:"o9J_ljlwpFY=",proportion:16/9,mdxType:"Miro"}))}m.isMDXComponent=!0}}]); |