From 91910d106cf023e0fde00ea9d3165d3512a4e6f0 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Wed, 30 Aug 2023 16:51:13 +0530 Subject: [PATCH] fix: seo fixes --- apps/space/components/issues/navbar/theme.tsx | 2 +- .../components/views/project-details.tsx | 66 ++++++ apps/space/constants/seo.ts | 11 +- .../[workspace_slug]/[project_slug]/index.tsx | 204 ++++++++---------- .../public/favicon/android-chrome-192x192.png | Bin 0 -> 2222 bytes .../public/favicon/android-chrome-512x512.png | Bin 0 -> 3832 bytes .../space/public/favicon/apple-touch-icon.png | Bin 0 -> 2176 bytes apps/space/public/favicon/favicon-16x16.png | Bin 0 -> 1625 bytes apps/space/public/favicon/favicon-32x32.png | Bin 0 -> 1617 bytes apps/space/public/favicon/favicon.ico | Bin 0 -> 919 bytes apps/space/public/favicon/site.webmanifest | 1 + 11 files changed, 157 insertions(+), 127 deletions(-) create mode 100644 apps/space/components/views/project-details.tsx create mode 100644 apps/space/public/favicon/android-chrome-192x192.png create mode 100644 apps/space/public/favicon/android-chrome-512x512.png create mode 100644 apps/space/public/favicon/apple-touch-icon.png create mode 100644 apps/space/public/favicon/favicon-16x16.png create mode 100644 apps/space/public/favicon/favicon-32x32.png create mode 100644 apps/space/public/favicon/favicon.ico create mode 100644 apps/space/public/favicon/site.webmanifest diff --git a/apps/space/components/issues/navbar/theme.tsx b/apps/space/components/issues/navbar/theme.tsx index faee1a706..2e40af8a3 100644 --- a/apps/space/components/issues/navbar/theme.tsx +++ b/apps/space/components/issues/navbar/theme.tsx @@ -15,7 +15,7 @@ import { RootStore } from "store/root"; export const NavbarTheme = observer(() => { const store: RootStore = useMobxStore(); - const { setTheme, theme } = useTheme(); + const { setTheme, theme = "light" } = useTheme(); const handleTheme = () => { store?.theme?.setTheme(store?.theme?.theme === "light" ? "dark" : "light"); diff --git a/apps/space/components/views/project-details.tsx b/apps/space/components/views/project-details.tsx new file mode 100644 index 000000000..f40bb1d0a --- /dev/null +++ b/apps/space/components/views/project-details.tsx @@ -0,0 +1,66 @@ +import { useRouter } from "next/router"; +import { observer } from "mobx-react-lite"; +// components +import { IssueListView } from "components/issues/board-views/list"; +import { IssueKanbanView } from "components/issues/board-views/kanban"; +import { IssueCalendarView } from "components/issues/board-views/calendar"; +import { IssueSpreadsheetView } from "components/issues/board-views/spreadsheet"; +import { IssueGanttView } from "components/issues/board-views/gantt"; +import { IssuePeekOverview } from "components/issues/peek-overview"; +// mobx store +import { RootStore } from "store/root"; +import { useMobxStore } from "lib/mobx/store-provider"; + +export const ProjectDetailsView = () => { + const router = useRouter(); + const { workspace_slug } = router.query; + + const store: RootStore = useMobxStore(); + + const activeIssueId = store.issue.activePeekOverviewIssueId; + + return ( +
+ {workspace_slug && ( + store.issue.setActivePeekOverviewIssueId(null)} + issue={store?.issue?.issues?.find((_issue) => _issue.id === activeIssueId) || null} + workspaceSlug={workspace_slug.toString()} + /> + )} + + {store?.issue?.loader && !store.issue.issues ? ( +
Loading...
+ ) : ( + <> + {store?.issue?.error ? ( +
+ Something went wrong. +
+ ) : ( + store?.issue?.currentIssueBoardView && ( + <> + {store?.issue?.currentIssueBoardView === "list" && ( +
+
+ +
+
+ )} + {store?.issue?.currentIssueBoardView === "kanban" && ( +
+ +
+ )} + {store?.issue?.currentIssueBoardView === "calendar" && } + {store?.issue?.currentIssueBoardView === "spreadsheet" && } + {store?.issue?.currentIssueBoardView === "gantt" && } + + ) + )} + + )} +
+ ); +}; diff --git a/apps/space/constants/seo.ts b/apps/space/constants/seo.ts index aafd5f7a3..b2baca612 100644 --- a/apps/space/constants/seo.ts +++ b/apps/space/constants/seo.ts @@ -1,8 +1,7 @@ -export const SITE_NAME = "Plane | Simple, extensible, open-source project management tool."; -export const SITE_TITLE = "Plane | Simple, extensible, open-source project management tool."; -export const SITE_DESCRIPTION = - "Open-source project management tool to manage issues, sprints, and product roadmaps with peace of mind."; +export const SITE_NAME = "Plane Deploy | Make your Plane boards and roadmaps pubic with just one-click. "; +export const SITE_TITLE = "Plane Deploy | Make your Plane boards public with one-click"; +export const SITE_DESCRIPTION = "Plane Deploy is a customer feedback management tool built on top of plane.so"; export const SITE_KEYWORDS = - "software development, plan, ship, software, accelerate, code management, release management, project management, issue tracking, agile, scrum, kanban, collaboration"; + "software development, customer feedback, software, accelerate, code management, release management, project management, issue tracking, agile, scrum, kanban, collaboration"; export const SITE_URL = "https://app.plane.so/"; -export const TWITTER_USER_NAME = "Plane | Simple, extensible, open-source project management tool."; +export const TWITTER_USER_NAME = "planepowers"; diff --git a/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx b/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx index 57a8b8770..5d29e60f2 100644 --- a/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx +++ b/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx @@ -1,27 +1,19 @@ -import { useEffect, useState } from "react"; +import { useEffect } from "react"; +import type { GetServerSideProps } from "next"; import { useRouter } from "next/router"; -// mobx -import { observer } from "mobx-react-lite"; -// components -import { IssueListView } from "components/issues/board-views/list"; -import { IssueKanbanView } from "components/issues/board-views/kanban"; -import { IssueCalendarView } from "components/issues/board-views/calendar"; -import { IssueSpreadsheetView } from "components/issues/board-views/spreadsheet"; -import { IssueGanttView } from "components/issues/board-views/gantt"; -import { IssuePeekOverview } from "components/issues/peek-overview"; -// mobx store -import { RootStore } from "store/root"; -import { useMobxStore } from "lib/mobx/store-provider"; +import Head from "next/head"; // types import { TIssueBoardKeys } from "store/types"; import ProjectLayout from "layouts/project-layout"; +import { ProjectDetailsView } from "components/views/project-details"; -const WorkspaceProjectPage = () => { - const store: RootStore = useMobxStore(); +const WorkspaceProjectPage = (props: any) => { + console.log("props", props); + const SITE_TITLE = props?.project_settings?.project_details?.name || "Plane | Deploy"; const router = useRouter(); - const activeIssueId = store.issue.activePeekOverviewIssueId; + // const activeIssueId = store.issue.activePeekOverviewIssueId; const { workspace_slug, project_slug, board, states, labels, priorities } = router.query as { workspace_slug: string; @@ -33,124 +25,96 @@ const WorkspaceProjectPage = () => { }; // updating default board view when we are in the issues page - useEffect(() => { - if (workspace_slug && project_slug && store?.project?.workspaceProjectSettings) { - const workspacePRojectSettingViews = store?.project?.workspaceProjectSettings?.views; - const userAccessViews: TIssueBoardKeys[] = []; + // useEffect(() => { + // if (workspace_slug && project_slug && store?.project?.workspaceProjectSettings) { + // const workspaceProjectSettingViews = store?.project?.workspaceProjectSettings?.views; + // const userAccessViews: TIssueBoardKeys[] = []; - Object.keys(workspacePRojectSettingViews).filter((_key) => { - if (_key === "list" && workspacePRojectSettingViews.list === true) userAccessViews.push(_key); - if (_key === "kanban" && workspacePRojectSettingViews.kanban === true) userAccessViews.push(_key); - if (_key === "calendar" && workspacePRojectSettingViews.calendar === true) userAccessViews.push(_key); - if (_key === "spreadsheet" && workspacePRojectSettingViews.spreadsheet === true) userAccessViews.push(_key); - if (_key === "gantt" && workspacePRojectSettingViews.gantt === true) userAccessViews.push(_key); - }); + // Object.keys(workspaceProjectSettingViews).filter((_key) => { + // if (_key === "list" && workspaceProjectSettingViews.list === true) userAccessViews.push(_key); + // if (_key === "kanban" && workspaceProjectSettingViews.kanban === true) userAccessViews.push(_key); + // if (_key === "calendar" && workspaceProjectSettingViews.calendar === true) userAccessViews.push(_key); + // if (_key === "spreadsheet" && workspaceProjectSettingViews.spreadsheet === true) userAccessViews.push(_key); + // if (_key === "gantt" && workspaceProjectSettingViews.gantt === true) userAccessViews.push(_key); + // }); - let url = `/${workspace_slug}/${project_slug}`; - let _board = board; + // let url = `/${workspace_slug}/${project_slug}`; + // let _board = board; - if (userAccessViews && userAccessViews.length > 0) { - if (!board) { - store.issue.setCurrentIssueBoardView(userAccessViews[0]); - _board = userAccessViews[0]; - } else { - if (userAccessViews.includes(board)) { - if (store.issue.currentIssueBoardView === null) store.issue.setCurrentIssueBoardView(board); - else { - if (board === store.issue.currentIssueBoardView) { - _board = board; - } else { - _board = board; - store.issue.setCurrentIssueBoardView(board); - } - } - } else { - store.issue.setCurrentIssueBoardView(userAccessViews[0]); - _board = userAccessViews[0]; - } - } - } + // if (userAccessViews && userAccessViews.length > 0) { + // if (!board) { + // store.issue.setCurrentIssueBoardView(userAccessViews[0]); + // _board = userAccessViews[0]; + // } else { + // if (userAccessViews.includes(board)) { + // if (store.issue.currentIssueBoardView === null) store.issue.setCurrentIssueBoardView(board); + // else { + // if (board === store.issue.currentIssueBoardView) { + // _board = board; + // } else { + // _board = board; + // store.issue.setCurrentIssueBoardView(board); + // } + // } + // } else { + // store.issue.setCurrentIssueBoardView(userAccessViews[0]); + // _board = userAccessViews[0]; + // } + // } + // } - _board = _board || "list"; - url = `${url}?board=${_board}`; + // _board = _board || "list"; + // url = `${url}?board=${_board}`; - if (states) url = `${url}&states=${states}`; - if (labels) url = `${url}&labels=${labels}`; - if (priorities) url = `${url}&priorities=${priorities}`; + // if (states) url = `${url}&states=${states}`; + // if (labels) url = `${url}&labels=${labels}`; + // if (priorities) url = `${url}&priorities=${priorities}`; - url = decodeURIComponent(url); + // url = decodeURIComponent(url); - router.replace(url); - } - }, [ - workspace_slug, - project_slug, - board, - router, - store?.issue, - store?.project?.workspaceProjectSettings, - states, - labels, - priorities, - ]); + // router.replace(url); + // } + // }, [ + // workspace_slug, + // project_slug, + // board, + // router, + // store?.issue, + // store?.project?.workspaceProjectSettings, + // states, + // labels, + // priorities, + // ]); - useEffect(() => { - if (!workspace_slug || !project_slug) return; + // useEffect(() => { + // if (!workspace_slug || !project_slug) return; - const params = { - state: states || null, - labels: labels || null, - priority: priorities || null, - }; + // const params = { + // state: states || null, + // labels: labels || null, + // priority: priorities || null, + // }; - store?.project?.getProjectSettingsAsync(workspace_slug, project_slug); - store?.issue?.getIssuesAsync(workspace_slug, project_slug, params); - }, [workspace_slug, project_slug, store?.project, store?.issue, states, labels, priorities]); + // store?.project?.getProjectSettingsAsync(workspace_slug, project_slug); + // store?.issue?.getIssuesAsync(workspace_slug, project_slug, params); + // }, [workspace_slug, project_slug, store?.project, store?.issue, states, labels, priorities]); return ( -
- store.issue.setActivePeekOverviewIssueId(null)} - issue={store?.issue?.issues?.find((_issue) => _issue.id === activeIssueId) || null} - workspaceSlug={workspace_slug} - /> - - {store?.issue?.loader && !store.issue.issues ? ( -
Loading...
- ) : ( - <> - {store?.issue?.error ? ( -
- Something went wrong. -
- ) : ( - store?.issue?.currentIssueBoardView && ( - <> - {store?.issue?.currentIssueBoardView === "list" && ( -
-
- -
-
- )} - {store?.issue?.currentIssueBoardView === "kanban" && ( -
- -
- )} - {store?.issue?.currentIssueBoardView === "calendar" && } - {store?.issue?.currentIssueBoardView === "spreadsheet" && } - {store?.issue?.currentIssueBoardView === "gantt" && } - - ) - )} - - )} -
+ + {SITE_TITLE} + +
); }; -export default observer(WorkspaceProjectPage); +export const getServerSideProps: GetServerSideProps = async ({ query: { workspace_slug, project_slug } }) => { + const res = await fetch( + `${process.env.NEXT_PUBLIC_API_BASE_URL}/api/public/workspaces/${workspace_slug}/project-boards/${project_slug}/settings/` + ); + const project_settings = await res.json(); + return { props: { project_settings } }; +}; + +export default WorkspaceProjectPage; diff --git a/apps/space/public/favicon/android-chrome-192x192.png b/apps/space/public/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..62e95acfc55b0719e3a66c77b211577980dc26a9 GIT binary patch literal 2222 zcmcIm4Q$j@94~H)U>KMgMi8^65XES(?OpG-tGnalZfqCrZH|k~pwX^$4rRM#27LckuYv^A?Reoxrqkd^nAUqfI*4GHEH|$ z-tYbXzyH@u_tXZfmMmVm7(tLFfogvpe1BrycisV?b?0LX;cJmv{iKc{cNJUr0^~sF z3Iw@*xfrT9>e12HF53qU^z@diya{6g=1#Crh%b z4@AZ4Rt;=!4TkvEM&2!8>%3@1f`J4QFgP?J#bljHc(61t1IN}hfuU)L(dfZ8SO(F0 zwifj%8bDn(66ZLfUK3SARAkg*|jkH`!0|h>hQ{!4JZCv095CamB4IN^sJXVb=hN4H6 zf1u7UUuOV@mSyucZm30)@+NenvKhLO4ag1AdZX2P$*7&O+0nIIL|ITw{lRNC06%8{4+gUa^F`qfGDJ}fMKiShA=1e>$PAQK z1ToxlBdF8O(C+J?uw(?z;BE>QcqXi95(ga?B`yL8RgPe2K8%b{i76U14AnWVoe%hY zwVDzZV{k#QtJ;VLDt#`>?Q-FE8M*M< z+1A+%nzEyqh^EVh;drYJJQ#1~9|%}>TD;{5WN6JOfTaIY7a5qYgbkC^z=jBn)=le< zfZ_?OVKaUZe|Isxc1?5V;PAw-hWVoke&i23Aj1<*gGX7k^ySqEQs52vH-r+Mmy`WR zzK*XNn4WTf|Mu82dJnx5+ugAfEgUQDc=Ykq`i)!Hy@W=8s8J6eTCaY9f9xNhL_fOc z;0|UIW$M$4)5RgYYH8amh3gL>)y0T-8_FUF z7q!s~I_^il`hO>ny)jtOGkEb{VzhrY8sBzhA8XE>{gdcAX^!t2e543#OO1`adhzvV zN++Lpw+?(a+)J}Vn-+dsh|Qm(y{Wr@{qp#B?}^mxrSs$WO$7VAqgOATDk-U&syC;m zXC{)vyMp^h-j`h7wp}%^DI+b%eve(*7oX}J+4@vscK_aUbaESYIXJX`(9yHEc=vpS zEyKC|=Zf|b_02BXvwfmH@Q>d z&E(T7p~&g(S@Rvy+4|X;={4>21Iy;K*m9XTxBaI>HT}WEJ!`B#ia=%1|K7%DU;GP+ C)#N__ literal 0 HcmV?d00001 diff --git a/apps/space/public/favicon/android-chrome-512x512.png b/apps/space/public/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..41400832b3142b8085148febc9488408d03cc07d GIT binary patch literal 3832 zcmeHKe{2&~9DjrHV<_Nnrt;%*+aD0Q-j8&dC_;2P$PSC7q5reAji&P?X4DGub7V zd-vYweSd#H@9vrM(&B{+9#{YXSm-WsRRAyx4QGM*bJ62U^yDadWGN-p8UVN5ZQL1P z&)#eR=G-TGtMn?*qbx6nOq?M5peY(s5E_8B1yP0L>!6PLU_g`{_@%?GI3@}XyfV*2 zc@!tC5lb3WxS^rc%Qw{Vb^$L~hpmmWNI(ec92N})C5??b@T6Q8jg4s%$C41e&Vd&i z3b86rIp&mAh*?b(!BZ52+3Y6TYOz?U)fhuD6iMZgG(*rKnOyMNjeuLBrRuBf(vTADk{1tOPC>% z^T}b|fg?*NTnH&?v67Yw6ABm^~jhl?yxxgD?aoT|-zpja6!7 zUDj&ke-NEszD@xOt;dtraYI`|p|lE3FRDjwqyln7wC0T|kgR~399DT)RFBNeF}zV& zrwTb;R=u(uoJ>^tq{$dVn;2|mr6>t=UFTS2ceIEwBU#NcFLE}_$T+fWIk+^z~p}6KkhG6Mbv^^@RsEmjcL>l zTOw*GtFct;Y=B!*qo9Z-%Z255qYWH5Z{!~ecxqa_?0;b7+J;JH5 zFo2?U)4C&(@ubnP6Mm3?buqa%rMV~Jh%t;|nyS!Cn(Uy27*0i0HavbXf>?8>+g0d| z?!DO6TH6D&kDop7>8a``h8Ji2w9>n@asJSvbLCm3&(_UdQuf9x#l0twe$v~Yi=i824Fju0YKplV0y*j)S-E8*3okp4t&&lO}vzdFT0G#E{^`bB2sYL zv8Uz9=k5f`oNH^VTeglx!}*Q#j#SkTb!=+;JeDz&)9F;(UpFLxY3R`5&Y`jJdm7a^ zk6#*Z-kRSqa;3d%O?KZm&4-^JS@F)9{VlUUd;xriw~l>!H8I@x?b-OU=Z6O$ye6%S zp8x*%p$K*C<85pv*tl=WOb<^Vs%lHbs73&~;r+Oz!}F6 zSJlL#W4~Sf;^)^ZZ70T2Mz{PiFwptt$fnWS#3Ga5(Fk7CE({I^6LZHGzbmg8dcuOr z<4Cw~tpC@t`WO9|wuk!W%rNsbI-x2@HYdRLrpG#$gYF+sb#!zc9si{}yRRosgqwq3 v?K;gUu_jpUmjT#k?z(;EO#R<|Ta3?M6)y9&m*=z_|EBJuQrE%tn|J&Pm-{+X literal 0 HcmV?d00001 diff --git a/apps/space/public/favicon/apple-touch-icon.png b/apps/space/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5273d4951dbcf125f8f21386422af21adaa1b609 GIT binary patch literal 2176 zcmcIme@xtD81Ax(Yzx^IRE!hXltf&#*B{&+ySjqx4&gEn2)hlGWvthJcXZsfU0Zg? zjX;7k>P$8>79(S0Gc)lIBF02F32X%UgN&TW#Ayr>#7!}b?Y8Nd;t%|K++CPX7Z+^O z_UrdO-}}DL^S4Ls`$-B7U(1!^=QRXbnQq)m zkRwMQMv(g+65W-0rRzC{mjfnFkUhW@3MdebARF^T3dh$19rXa8D6v?yyB9-6fyF8; zF4CpgL5)}(R>78ViJK4C@-_j>&qFtc7-%2>bPf##{F26mSS)6jfn#Huz|a^(uVt|U z!y#JfDnsqE3Q((w#CejW(OjE}vYO3S@+p)iX_6o<1V!VNl_AXxm5atN40=-qFH`P# zHtq|4u~?0+D-1ydgF#a;$0Vyhg0k6c1W6M#jY9;k)k``T!X+&$VZi}3UKJHxlqJ-# z$a&;CoyB0J^ArL~(yXM#WrBhcAx*Orj_-UO;aU zEEWsS)3g=O%{6m4M_Y1nvxldxW{<~1^B}R`A@g-c2_*Il|8ak*D#8}z{P%3fXiTGa zm|{_bS*?$^&K9scKJtrbtXvq5H`;*3cq9Knz~a;5Ju5J8Hdq6o(SNCnd6*`9^&qE$ z0v}ZCu60Mi;0dE)=Xnr+r5IaV(A)_)JTZ)6@~DCz$-@pv@Pt$0QC9eRQ3Zl5UF~!f zxI;&;e2sUEgGUFhN4vf{e{5&fhpE=KZ_7?vAAGqvkTP=ULJ@at>zWp9XxHj}Z@uyc z^-|wzx%tE|{`U8OJbif>+nztxv*X}5>0=XZowf4m(KPq;dygS=*##|FP5Cm{{u9nM z=Jm~w7Y@IjdgOt{nH-#$T2d9fICHLRwD(GHS9suyo*UEs(ay1JX!9Sds>hj+X8ST$ zEuUR?Ribxg-@nM-=NYv%^v!iwWoMl2ssDLmDl;eN)~7Rh;orMP)@_Tv+1hn|q_1{- zPE~f_Jb;f1!})V(=ccl&GuhtoKqT^7>DaF`gPSMEcAVk8-%t78$@-yb@)Ek35+!5@ zFeC4dU3=!s&hf6EaDOCn?)cvE-)0B;)^-FVk?Cl(vEfqa*5?L+()`A`!SsWf<5g!a zMy+dq+P1yBaq`B~$J?9an+IB3H)oXQH(mbh{K}4?zqRGXMM`BN&KUQ@{TG&=y84}O zsJH1<_ud{us*@Q*dF{3rSbn6zS+M{AahsqrSbcbFDZB6E;$_A^g0ry1(Ya}7^Pi}J B1vCHv literal 0 HcmV?d00001 diff --git a/apps/space/public/favicon/favicon-16x16.png b/apps/space/public/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddbd49c043e06b87fe4c980588a8cba97bfe94e GIT binary patch literal 1625 zcmbVMTWB0r7#@k$UTm-wY!D>Fqy>wanKQGqyP0FgxYE0q{BiG8hxx|_*ElwBI0ALrN)c1i|EP;P%p-Zff?S*^&}dz^?nG+57&dI(5Ap9V*6vm` zcN0!0M!0Q_D*DqJcG#v9&ZVR5*=_0P=otJiol0bTUeNytg1)vbd#1T_pMgEA_MdoN zpa0>Lvnbua>C}stkMbW)>su0S7v9ZHKz}CMzE?TRd_RRgJ+!o3c^up;0RWssSLSEF z{%Ns|uH!R%ySKh!&lWc*U!A<`rOhwTZhUR`lh1hHd|Sxna-)ZTzxDXRGu=;}zU{#2 zbCj}9Nxef7y!VvwU6wfF3MyJ!^0#BZ| z-}C#w{|}_5;=MhO^-vVmn@q%}$xM4=?S16$R4TubX`PkW?NHSH4|&5!9eJydqV9b} zPtUn?@-tAy2B&B^gSe7m5i~`Oj+HD$okuR6K{?%&n49M=Ftn~o%xp*ovK2*nJyEgI zOl2yqR_4`+#*95hkCq@IFp#UzC8JW3L?Hn&eA`u>lyeP5+!8&ErRZ6Vs473?y$Wd+Ga&>Id9;1@M3$DZvO`9edR)^Mf zT5ci^<4cOg3mouFY5+C0gR>UwLPNNw@~D6eWV#N)3LUJK$1ZmA_+O|y*S82Du9fAE zjN9sB7#$IgJGqyb(Q?Rb(N4N-A$}S;c)?cDJIbyLGd=ZRGhP)u==#E__wcnNF(qy+&AK^PRD1R)pzO{k1DJzM@KRD=LP5!?bL zDWfT_a!0VH!YsB8g&3?GN)GXsnPcdV8(|a|uuTLL?EC}>HIG-AUhcqz?vSXKTctCDo@=cNI^9SYsHk2U zNQ~;mA8AbMSifrzG--=@L`eT5FPbn1XWgP=qwyT^)*bVXC(83)!8YyS|88RAZdGx& z;iO}D%TB8zn@+PsCh2fCX=Rm1^Usqucr6(lPtWaFSL*e#&z`>LxbMRkzVgw)Kl& zPrpp=H$A&@V|L5ii}j6%PF}A{xeM=2%#8GW|KlIuoI7(&XTnnL%lao*7yH@Ny8YBg z4-du<^{)A}dZM5ag9@Z9l;gvVoDO!R4BVH!HJ(Yv3P^ zH@r2yO~rjrSnFbIzyI_zJd?INBsNTb)$*(7v}^)`zb0=xT=4o;?bkaZHYM7^JlkdJ zK0G+Tis68=8qj$S3=B*R98_a)G;lhAe8s{bz(6eql1UHNoSpqPiM3)$4da|+t(-sP z&s?=O=GnTgE^Pnmxt47+R*7E~4({PUpl-}l8ohVzzGvLoQ$oM)t;+2B$T;JS!Idlj zp2e?QzpT1g=KTl1ryF0f+zA+JK>!Zbb7yjz9)?{F+Imy(nnd#S)2~$0OV{nYnYiNj ztH`grW}Pv7wjgZ#)w7B5edeM2pS|kUZQHfRE`0s1`!O>4EA7JKeGE+)%8P$*GP>rv z)$H&EhC8A4K8Dw7YM*MCiv0iipEtcshF^O~h71dXg?K$vC0}yz+`njxg HN@xNAL5sc; literal 0 HcmV?d00001 diff --git a/apps/space/public/favicon/site.webmanifest b/apps/space/public/favicon/site.webmanifest new file mode 100644 index 000000000..45dc8a206 --- /dev/null +++ b/apps/space/public/favicon/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file