on master help sign in
removing content
23ab85aGordon
components/Header.js+17−13
@@ -66,15 +66,16 @@ export default function Header(props) {
66 <ActiveLink
66 <ActiveLink
67 currentPath={currentPath}
67 currentPath={currentPath}
68 className="mr-5 type-ui"
68 className="mr-5 type-ui"
69− href="/ecosystem">
69+ href="/ecosystem"
70+ >
70 Ecosystem
71 Ecosystem
71 </ActiveLink>
72 </ActiveLink>
72
73
73 <ActiveLink
74 <ActiveLink
74 currentPath={currentPath}
75 currentPath={currentPath}
75 className="mr-5 type-ui"
76 className="mr-5 type-ui"
76− href="/grants">
77+ href="/grants"
77−
78+ >
78 Grants
79 Grants
79 </ActiveLink>
80 </ActiveLink>
80
81
@@ -115,29 +116,33 @@ export default function Header(props) {
115
116
116 <ActiveLink
117 <ActiveLink
117 currentPath={currentPath}
118 currentPath={currentPath}
118− className="mr-5 mb-4 text-green-400"
119+ className="mr-5 mt-4 mb-4 text-green-400"
119 href="/getting-started"
120 href="/getting-started"
120 >
121 >
121 Get Started
122 Get Started
122 </ActiveLink>
123 </ActiveLink>
123
124
124−
125 <ActiveLink
125 <ActiveLink
126 currentPath={currentPath}
126 currentPath={currentPath}
127 className="mr-5 mb-4"
127 className="mr-5 mb-4"
128− href="/ecosystem">
128+ href="/overview"
129−
129+ >
130− Ecosystem
130+ Overview
131 </ActiveLink>
131 </ActiveLink>
132
132
133 <ActiveLink
133 <ActiveLink
134 currentPath={currentPath}
134 currentPath={currentPath}
135 className="mr-5 mb-4"
135 className="mr-5 mb-4"
136− href="/overview">
136+ href="/ecosystem"
137− Overview
137+ >
138+ Ecosystem
138 </ActiveLink>
139 </ActiveLink>
139
140
141+ <ActiveLink
140− <ActiveLink currentPath={currentPath} className="mr-5 mb-4" href="/grants">
142+ currentPath={currentPath}
143+ className="mr-5 mb-4"
144+ href="/grants"
145+ >
141 Grants
146 Grants
142 </ActiveLink>
147 </ActiveLink>
143
148
@@ -148,7 +153,7 @@ export default function Header(props) {
148 >
153 >
149 Events
154 Events
150 </ActiveLink>
155 </ActiveLink>
151−
156+
152 <ActiveLink
157 <ActiveLink
153 currentPath={currentPath}
158 currentPath={currentPath}
154 className="mr-5 mb-4"
159 className="mr-5 mb-4"
@@ -156,7 +161,6 @@ export default function Header(props) {
156 >
161 >
157 Blog
162 Blog
158 </ActiveLink>
163 </ActiveLink>
159−
160 </MenuTray>
164 </MenuTray>
161 </header>
165 </header>
162 );
166 );
components/PostPreview.js+11−33
@@ -1,5 +1,5 @@
1import Link from "next/link";
1import Link from "next/link";
2−import BackgroundImage from "./BackgroundImage";
2+import { Card } from "foundation-design-system";
3import { formatDate, generateDisplayDate } from "../lib/lib";
3import { formatDate, generateDisplayDate } from "../lib/lib";
4
4
5export default function PostPreview(props) {
5export default function PostPreview(props) {
@@ -7,38 +7,16 @@ export default function PostPreview(props) {
7
7
8 const date = generateDisplayDate(props.post.date);
8 const date = generateDisplayDate(props.post.date);
9 return (
9 return (
10− <div className={`cursor-pointer ${props.className}`}>
10+ <Card
11− {props.title ? <h3 className="mb-2">{props.title}</h3> : null}
12−
13− <Link
14− href={`/${section}/${props.post.slug}`}
11+ slug={`/${section}/${props.post.slug}`}
15− key={`post-${props.post.slug}`}
16− >
17− <div>
18− <BackgroundImage
19− className="aspect-w-5 aspect-h-4 rounded-lg"
20− src={props.post.extra.image || ""}
12+ image={props.post.extra.image}
21− />
13+ title={props?.title || props.post?.title || ""}
22−
23− <h4 className="mt-2">{props.post.title}</h4>
24− <div className="flex items-baseline mt-1">
25− {props.post.extra.author ? (
26− <div className="type-sub-bold mr-2">
27− {props.post.extra.author}
14+ author={props.post?.extra?.author || ""}
28− </div>
29− ) : null}
30− {props.post.extra.ship ? (
31− <Link href={`/ids/${props.post.extra.ship}`} passHref>
15+ ship={props.post?.extra?.ship || ""}
32− <a className="type-sub-bold text-wall-500 font-mono">
16+ content={
33− {props.post.extra.ship}
34− </a>
35− </Link>
36− ) : null}
37− </div>
38− <div className="text-wall-500 type-sub mt-1">{formatDate(date)}</div>
17+ <div className="text-wall-500 type-sub mt-1">{formatDate(date)}</div>
39− </div>
18+ }
40− </Link>
19+ />
41− </div>
42 );
20 );
43}
21}
44
22
components/ecosystem/IndexCard.js+2−2
@@ -3,7 +3,7 @@ import classnames from "classnames";
3export default function IndexCard({ slug, feat }) {
3export default function IndexCard({ slug, feat }) {
4 return (
4 return (
5 <Link href={slug}>
5 <Link href={slug}>
6− <div className="cursor-pointer bg-wall-100 rounded-xl basis-1/3 h-full">
6+ <div className="cursor-pointer bg-wall-100 rounded-xl min-h-0 flex-1">
7 <div className="flex flex-col p-4 justify-between items-between h-full relative">
7 <div className="flex flex-col p-4 justify-between items-between h-full relative">
8 {feat.image ? (
8 {feat.image ? (
9 <img
9 <img
@@ -36,7 +36,7 @@ const badge = (type) => {
36 {
36 {
37 "bg-[#B37ED7]": type === "Organization",
37 "bg-[#B37ED7]": type === "Organization",
38 "bg-[#83b2d4]": type === "Application",
38 "bg-[#83b2d4]": type === "Application",
39− "bg-[#8dd5b1]": type === "Podcast",
39+ "bg-[#333333]": type === "Podcast",
40 "bg-[#8dd5b1]": type === "Marketplace",
40 "bg-[#8dd5b1]": type === "Marketplace",
41 }
41 }
42 )}
42 )}
components/ecosystem/Post.js+25−13
@@ -3,22 +3,34 @@ import classnames from "classnames";
3import Link from "next/link";
3import Link from "next/link";
4export default function Post({ post }) {
4export default function Post({ post }) {
5 return ["featured-1", "featured-2", "featured-3"].map((feat) => {
5 return ["featured-1", "featured-2", "featured-3"].map((feat) => {
6+ const childPath =
7+ post[feat] && post[feat]?.matchedPost?.type === "Application"
8+ ? `${post[feat]?.matchedPost.ship}/${post[feat].matchedPost.slug}`
9+ : `${post[feat].matchedPost?.slug}`;
10+ const href = post[feat]?.matchedPost
11+ ? `/${post[feat].matchedPost.type.toLowerCase()}s/${childPath}`
12+ : null;
6 return post?.[feat] ? (
13 return post?.[feat] ? (
14+ <Link href={href || "#"}>
15+ <div
7− <div className="mt-8 mb-24">
16+ className="mt-8 mb-24 cursor-pointer"
17+ id={post?.[feat].title.toLowerCase().replace(/ /, "-")}
18+ >
8− <div className="flex space-x-4 items-center">
19+ <div className="flex space-x-4 items-center">
9− <img
20+ <img
10− className="rounded-xl w-24 object-cover"
21+ className="rounded-xl w-24 object-cover"
11− src={post[feat].image}
22+ src={post[feat].image}
12− />
23+ />
13− <div className="flex flex-col">
24+ <div className="flex flex-col">
14− <h4 className="text-xl pb-1 font-bold">{post?.[feat].title}</h4>
25+ <h4 className="text-xl pb-1 font-bold">{post?.[feat].title}</h4>
15− {badge(post[feat].type)}
26+ {badge(post[feat].type)}
27+ </div>
28+ </div>
29+ <div className="markdown mt-8">
30+ <Markdown.render content={JSON.parse(post[feat].content)} />
16 </div>
31 </div>
17 </div>
32 </div>
18− <div className="markdown mt-8">
33+ </Link>
19− <Markdown.render content={JSON.parse(post[feat].content)} />
20− </div>
21− </div>
22 ) : null;
34 ) : null;
23 });
35 });
24}
36}
content/ecosystem/spotlight/june-2022.md−5
@@ -5,7 +5,6 @@ date = "2022-06-01"
5[featured-1]
5[featured-1]
6title = "Other Life #193"
6title = "Other Life #193"
7description = "Professor Neal Davis Discusses why Urbit computers have souls, Shinto philosophy, and more"
7description = "Professor Neal Davis Discusses why Urbit computers have souls, Shinto philosophy, and more"
8−type = "Podcast"
9image = "https://s3.us-east-1.amazonaws.com/haddefsigwen1/reciprocal/2022.5.20..19.52.50-B137D4AA-DA9E-4B07-98CE-C001C576C7CA_1_201_a.jpeg"
8image = "https://s3.us-east-1.amazonaws.com/haddefsigwen1/reciprocal/2022.5.20..19.52.50-B137D4AA-DA9E-4B07-98CE-C001C576C7CA_1_201_a.jpeg"
10URL = "https://urbit.live"
9URL = "https://urbit.live"
11content = """
10content = """
@@ -14,8 +13,6 @@ Urbit Foundation’s Technical Director Neal Davis discusses the philosophy of d
14[featured-2]
13[featured-2]
15title = "Studio"
14title = "Studio"
16description = "One line about the thing"
15description = "One line about the thing"
17−type = "Application"
18−image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
19URL = "https://reciprocal.ltd"
16URL = "https://reciprocal.ltd"
20content = """
17content = """
21Studio is an application from Tirrel Corporation which enables Urbit users to turn a Groups notebook into a public blog with just a few clicks.
18Studio is an application from Tirrel Corporation which enables Urbit users to turn a Groups notebook into a public blog with just a few clicks.
@@ -33,8 +30,6 @@ Check out more from Tirrel at tirrel.io and install Studio from ~tirrel/studio.
33[featured-3]
30[featured-3]
34title = "Reciprocal Ltd."
31title = "Reciprocal Ltd."
35description = "One line about the thing"
32description = "One line about the thing"
36−type = "Organization"
37−image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
38URL = "https://reciprocal.ltd"
33URL = "https://reciprocal.ltd"
39content = """
34content = """
40A design consultancy and friend network.
35A design consultancy and friend network.
content/getting-started/joining-groups.md+1−1
@@ -6,7 +6,7 @@ weight = 2
6
6
7### 1. Get on the network
7### 1. Get on the network
8
8
9−First, you’ll need to get on Urbit. You can quickly check out the network by [downloading the Port application](https://github.com/urbit/port) and booting up a comet–a temporary Urbit ID.
9+First, you’ll need to get on Urbit. You can quickly check out the network by [downloading the Port application]([https://github.com/urbit/port](https://urbit.org/getting-started/desktop) and booting up a comet–a temporary Urbit ID.
10
10
11For long-term use, you’ll want to get a permanent Urbit ID and consider a running your urbit in the cloud or on a hosted service.
11For long-term use, you’ll want to get a permanent Urbit ID and consider a running your urbit in the cloud or on a hosted service.
12
12
content/grants/eyre-scry.md+17
@@ -55,4 +55,21 @@ A %warp request to clay is maintained for each clay file in the map in order to
55be notified about changes to them. When notified about said changes, Eyre will
55be notified about changes to them. When notified about said changes, Eyre will
56give a %gift to the runtime.
56give a %gift to the runtime.
57
57
58+### Milestone 1: 3 stars
59+
60+Have a complete pass-through interface inside Eyre for catching GET requests and
61+bypassing the normal flow to do a scry instead. Fully implement the Clay request
62+flow and subscription for keeping track of all scry paths in the map. Milestone
63+is considered complete once the code is to spec and has been tested by
64+~tacryt-socryp.
65+
66+### Milestone 2: 2 stars
67+
68+Have a complete modification to Arvo for issuing a new runtime %gift to notify
69+the interpreter that content in the Eyre scry map has changed, and test that it
70+is sent upon %born events and when content changes. This milestone is considered
71+complete once the code is to spec, it has been tested by ~tacryt-socryp, and one
72+or more reviewers from the core team has approved the code, but not necessarily
73+merged it.
74+
58reward: 5 stars
75reward: 5 stars
content/podcasts/2022-01-21_the-most-beautiful-computer.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "The Most Beautiful Computer with Édouard Urcades | The Urbit Series"
2title = "The Most Beautiful Computer with Édouard Urcades | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "January 21, 2022"
4+date = "2022-01-21"
5URL = "https://podcast.otherlife.co/episodes/quantum-computing-and-anarcho-communist-swarm-intelligence-with-jonathan-paprocki-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/quantum-computing-and-anarcho-communist-swarm-intelligence-with-jonathan-paprocki-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-01-26_the-only-dignified-computer.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "The Only Dignified Computer with Tirrel Corporation | The Urbit Series"
2title = "The Only Dignified Computer with Tirrel Corporation | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "January 26, 2022"
4+date = "2022-01-26"
5URL = "https://podcast.otherlife.co/episodes/urbit-blockchains-and-the-next-billion-users-with-ted-blackman-engineer-at-tlon-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/urbit-blockchains-and-the-next-billion-users-with-ted-blackman-engineer-at-tlon-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-02-01_100-year-computer.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "The 100-Year Computer with Galen Wolfe-Pauly | The Urbit Series"
2title = "The 100-Year Computer with Galen Wolfe-Pauly | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "February 1, 2022"
4+date = "2022-02-01"
5URL = "https://www.youtube.com/watch?v=YWOsBWBQAnQ"
5URL = "https://www.youtube.com/watch?v=YWOsBWBQAnQ"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-02-15_building-web3-products.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "Building Web3 Products on Urbit with Nico Arqueros of dcSpark | The Urbit Series"
2title = "Building Web3 Products on Urbit with Nico Arqueros of dcSpark | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "February 14, 2022"
4+date = "2022-02-14"
5URL = "https://podcast.otherlife.co/episodes/building-web3-products-on-urbit-with-nico-arqueros-of-dcspark-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/building-web3-products-on-urbit-with-nico-arqueros-of-dcspark-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-02-21_most-correct-computer.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "The Most Correct Computer (How Urbit Wins) with Philip Monk, CTO of Tlon | The Urbit Series"
2title = "The Most Correct Computer (How Urbit Wins) with Philip Monk, CTO of Tlon | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "February 21, 2022"
4+date = "2022-02-21"
5URL = "https://podcast.otherlife.co/episodes/the-most-correct-computer-how-urbit-wins-with-philip-monk-cto-of-tlon-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/the-most-correct-computer-how-urbit-wins-with-philip-monk-cto-of-tlon-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-03-02_theory-of-the-egirl.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "Materials for a Theory of the E-Girl with Soph and **** of Remilia Collective | The Urbit Series"
2title = "Materials for a Theory of the E-Girl with Soph and **** of Remilia Collective | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "March 2, 2022"
4+date = "2022-03-02"
5URL = "https://podcast.otherlife.co/episodes/materials-for-a-theory-of-the-e-girl-with-soph-and-of-remilia-collective-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/materials-for-a-theory-of-the-e-girl-with-soph-and-of-remilia-collective-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-03-08_urbit-blockchains.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "Urbit, Blockchains, and the Next Billion Users with Ted Blackman, Engineer at Tlon | The Urbit Series"
2title = "Urbit, Blockchains, and the Next Billion Users with Ted Blackman, Engineer at Tlon | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "March 8, 2022"
4+date = "2022-03-08"
5URL = "https://podcast.otherlife.co/episodes/urbit-blockchains-and-the-next-billion-users-with-ted-blackman-engineer-at-tlon-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/urbit-blockchains-and-the-next-billion-users-with-ted-blackman-engineer-at-tlon-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-03-13_alien-invasions.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "Alien Invasions From the Future with Sam Frank, Writer and Galaxy Owner | The Urbit Series"
2title = "Alien Invasions From the Future with Sam Frank, Writer and Galaxy Owner | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "March 13, 2022"
4+date = "2022-03-12"
5URL = "https://podcast.otherlife.co/episodes/alien-invasions-from-the-future-with-sam-frank-writer-and-galaxy-owner-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/alien-invasions-from-the-future-with-sam-frank-writer-and-galaxy-owner-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7
7
content/podcasts/2022-03-18_politics-of-urbit-governance.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "Demystifying the Politics of Urbit Governance with Anthony Arroyo of The Combine | The Urbit Series"
2title = "Demystifying the Politics of Urbit Governance with Anthony Arroyo of The Combine | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "March 18, 2022"
4+date = "2022-03-18"
5URL = "https://podcast.otherlife.co/episodes/demystifying-the-politics-of-urbit-governance-with-anthony-arroyo-of-the-combine-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/demystifying-the-politics-of-urbit-governance-with-anthony-arroyo-of-the-combine-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
content/podcasts/2022-03-23_quantum-computing.md+1−1
@@ -1,7 +1,7 @@
1+++
1+++
2title = "Quantum Computing and Anarcho-Communist Swarm Intelligence with Jonathan Paprocki | The Urbit Series"
2title = "Quantum Computing and Anarcho-Communist Swarm Intelligence with Jonathan Paprocki | The Urbit Series"
3podcast = "Other Life"
3podcast = "Other Life"
4−date = "March 23, 2022"
4+date = "2022-03-23"
5URL = "https://podcast.otherlife.co/episodes/quantum-computing-and-anarcho-communist-swarm-intelligence-with-jonathan-paprocki-the-urbit-series"
5URL = "https://podcast.otherlife.co/episodes/quantum-computing-and-anarcho-communist-swarm-intelligence-with-jonathan-paprocki-the-urbit-series"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
6image = "https://media.urbit.org/site/ecosystem/podcasts/full_1639502000-artwork.jpg"
7+++
7+++
package-lock.json+150−179
@@ -69,14 +69,14 @@
69 }
69 }
70 },
70 },
71 "node_modules/@next/env": {
71 "node_modules/@next/env": {
72− "version": "12.2.2",
72+ "version": "12.2.3",
73− "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.2.tgz",
73+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.3.tgz",
74− "integrity": "sha512-BqDwE4gDl1F608TpnNxZqrCn6g48MBjvmWFEmeX5wEXDXh3IkAOw6ASKUgjT8H4OUePYFqghDFUss5ZhnbOUjw=="
74+ "integrity": "sha512-2lWKP5Xcvnor70NaaROZXBvU8z9mFReePCG8NhZw6NyNGnPvC+8s+Cre/63LAB1LKzWw/e9bZJnQUg0gYFRb2Q=="
75 },
75 },
76 "node_modules/@next/swc-android-arm-eabi": {
76 "node_modules/@next/swc-android-arm-eabi": {
77− "version": "12.2.2",
77+ "version": "12.2.3",
78− "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.2.tgz",
78+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.3.tgz",
79− "integrity": "sha512-VHjuCHeq9qCprUZbsRxxM/VqSW8MmsUtqB5nEpGEgUNnQi/BTm/2aK8tl7R4D0twGKRh6g1AAeFuWtXzk9Z/vQ==",
79+ "integrity": "sha512-JxmCW9XB5PYnkGE67BdnBTdqW0SW6oMCiPMHLdjeRi4T3U4JJKJGnjQld99+6TPOfPWigtw3W7Cijp5gc+vJ/w==",
80 "cpu": [
80 "cpu": [
81 "arm"
81 "arm"
82 ],
82 ],
@@ -89,9 +89,9 @@
89 }
89 }
90 },
90 },
91 "node_modules/@next/swc-android-arm64": {
91 "node_modules/@next/swc-android-arm64": {
92− "version": "12.2.2",
92+ "version": "12.2.3",
93− "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.2.tgz",
93+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.3.tgz",
94− "integrity": "sha512-v5EYzXUOSv0r9mO/2PX6mOcF53k8ndlu9yeFHVAWW1Dhw2jaJcvTRcCAwYYN8Q3tDg0nH3NbEltJDLKmcJOuVA==",
94+ "integrity": "sha512-3l4zXpWnzy0fqoedsFRxzMy/eGlMMqn6IwPEuBmtEQ4h7srmQFHyT+Bk+eVHb0o1RQ7/TloAa+mu8JX5tz/5tA==",
95 "cpu": [
95 "cpu": [
96 "arm64"
96 "arm64"
97 ],
97 ],
@@ -104,9 +104,9 @@
104 }
104 }
105 },
105 },
106 "node_modules/@next/swc-darwin-arm64": {
106 "node_modules/@next/swc-darwin-arm64": {
107− "version": "12.2.2",
107+ "version": "12.2.3",
108− "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.2.tgz",
108+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.3.tgz",
109− "integrity": "sha512-JCoGySHKGt+YBk7xRTFGx1QjrnCcwYxIo3yGepcOq64MoiocTM3yllQWeOAJU2/k9MH0+B5E9WUSme4rOCBbpA==",
109+ "integrity": "sha512-eutDO/RH6pf7+8zHo3i2GKLhF0qaMtxWpY8k3Oa1k+CyrcJ0IxwkfH/x3f75jTMeCrThn6Uu8j3WeZOxvhto1Q==",
110 "cpu": [
110 "cpu": [
111 "arm64"
111 "arm64"
112 ],
112 ],
@@ -119,9 +119,9 @@
119 }
119 }
120 },
120 },
121 "node_modules/@next/swc-darwin-x64": {
121 "node_modules/@next/swc-darwin-x64": {
122− "version": "12.2.2",
122+ "version": "12.2.3",
123− "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.2.tgz",
123+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.3.tgz",
124− "integrity": "sha512-dztDtvfkhUqiqpXvrWVccfGhLe44yQ5tQ7B4tBfnsOR6vxzI9DNPHTlEOgRN9qDqTAcFyPxvg86mn4l8bB9Jcw==",
124+ "integrity": "sha512-lve+lnTiddXbcT3Lh2ujOFywQSEycTYQhuf6j6JrPu9oLQGS01kjIqqSj3/KMmSoppEnXo3BxkgYu+g2+ecHkA==",
125 "cpu": [
125 "cpu": [
126 "x64"
126 "x64"
127 ],
127 ],
@@ -134,9 +134,9 @@
134 }
134 }
135 },
135 },
136 "node_modules/@next/swc-freebsd-x64": {
136 "node_modules/@next/swc-freebsd-x64": {
137− "version": "12.2.2",
137+ "version": "12.2.3",
138− "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.2.tgz",
138+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.3.tgz",
139− "integrity": "sha512-JUnXB+2xfxqsAvhFLPJpU1NeyDsvJrKoOjpV7g3Dxbno2Riu4tDKn3kKF886yleAuD/1qNTUCpqubTvbbT2VoA==",
139+ "integrity": "sha512-V4bZU1qBFkULTPW53phY8ypioh3EERzHu9YKAasm9RxU4dj+8c/4s60y+kbFkFEEpIUgEU6yNuYZRR4lHHbUGA==",
140 "cpu": [
140 "cpu": [
141 "x64"
141 "x64"
142 ],
142 ],
@@ -149,9 +149,9 @@
149 }
149 }
150 },
150 },
151 "node_modules/@next/swc-linux-arm-gnueabihf": {
151 "node_modules/@next/swc-linux-arm-gnueabihf": {
152− "version": "12.2.2",
152+ "version": "12.2.3",
153− "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.2.tgz",
153+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.3.tgz",
154− "integrity": "sha512-XeYC/qqPLz58R4pjkb+x8sUUxuGLnx9QruC7/IGkK68yW4G17PHwKI/1njFYVfXTXUukpWjcfBuauWwxp9ke7Q==",
154+ "integrity": "sha512-MWxS/i+XSEKdQE0ZmdYkPPrWKBi4JwMVaXdOW9J/T/sZJsHsLlSC9ErBcNolKAJEVka+tnw9oPRyRCKOj+q0sw==",
155 "cpu": [
155 "cpu": [
156 "arm"
156 "arm"
157 ],
157 ],
@@ -164,9 +164,9 @@
164 }
164 }
165 },
165 },
166 "node_modules/@next/swc-linux-arm64-gnu": {
166 "node_modules/@next/swc-linux-arm64-gnu": {
167− "version": "12.2.2",
167+ "version": "12.2.3",
168− "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.2.tgz",
168+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.3.tgz",
169− "integrity": "sha512-d6jT8xgfKYFkzR7J0OHo2D+kFvY/6W8qEo6/hmdrTt6AKAqxs//rbbcdoyn3YQq1x6FVUUd39zzpezZntg9Naw==",
169+ "integrity": "sha512-ikXkqAmvEcWTzIQFDdmrUHLWzdDAF5s2pVsSpQn9rk/gK1i9webH1GRQd2bSM7JLuPBZSaYrNGvDTyHZdSEYlg==",
170 "cpu": [
170 "cpu": [
171 "arm64"
171 "arm64"
172 ],
172 ],
@@ -179,9 +179,9 @@
179 }
179 }
180 },
180 },
181 "node_modules/@next/swc-linux-arm64-musl": {
181 "node_modules/@next/swc-linux-arm64-musl": {
182− "version": "12.2.2",
182+ "version": "12.2.3",
183− "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.2.tgz",
183+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.3.tgz",
184− "integrity": "sha512-rIZRFxI9N/502auJT1i7coas0HTHUM+HaXMyJiCpnY8Rimbo0495ir24tzzHo3nQqJwcflcPTwEh/DV17sdv9A==",
184+ "integrity": "sha512-wE45gGFkeLLLnCoveKaBrdpYkkypl3qwNF2YhnfvfVK7etuu1O679LwClhCWinDVBr+KOkmyHok00Z+0uI1ycg==",
185 "cpu": [
185 "cpu": [
186 "arm64"
186 "arm64"
187 ],
187 ],
@@ -194,9 +194,9 @@
194 }
194 }
195 },
195 },
196 "node_modules/@next/swc-linux-x64-gnu": {
196 "node_modules/@next/swc-linux-x64-gnu": {
197− "version": "12.2.2",
197+ "version": "12.2.3",
198− "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.2.tgz",
198+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.3.tgz",
199− "integrity": "sha512-ir1vNadlUDj7eQk15AvfhG5BjVizuCHks9uZwBfUgT5jyeDCeRvaDCo1+Q6+0CLOAnYDR/nqSCvBgzG2UdFh9A==",
199+ "integrity": "sha512-MbFI6413VSXiREzHwYD8YAJLTknBaC+bmjXgdHEEdloeOuBFQGE3NWn3izOCTy8kV+s98VDQO8au7EKKs+bW0g==",
200 "cpu": [
200 "cpu": [
201 "x64"
201 "x64"
202 ],
202 ],
@@ -209,9 +209,9 @@
209 }
209 }
210 },
210 },
211 "node_modules/@next/swc-linux-x64-musl": {
211 "node_modules/@next/swc-linux-x64-musl": {
212− "version": "12.2.2",
212+ "version": "12.2.3",
213− "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.2.tgz",
213+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.3.tgz",
214− "integrity": "sha512-bte5n2GzLN3O8JdSFYWZzMgEgDHZmRz5wiispiiDssj4ik3l8E7wq/czNi8RmIF+ioj2sYVokUNa/ekLzrESWw==",
214+ "integrity": "sha512-jMBD0Va6fInbPih/dNySlNY2RpjkK6MXS+UGVEvuTswl1MZr+iahvurmshwGKpjaRwVU4DSFMD8+gfWxsTFs1Q==",
215 "cpu": [
215 "cpu": [
216 "x64"
216 "x64"
217 ],
217 ],
@@ -224,9 +224,9 @@
224 }
224 }
225 },
225 },
226 "node_modules/@next/swc-win32-arm64-msvc": {
226 "node_modules/@next/swc-win32-arm64-msvc": {
227− "version": "12.2.2",
227+ "version": "12.2.3",
228− "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.2.tgz",
228+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.3.tgz",
229− "integrity": "sha512-ZUGCmcDmdPVSAlwJ/aD+1F9lYW8vttseiv4n2+VCDv5JloxiX9aY32kYZaJJO7hmTLNrprvXkb4OvNuHdN22Jg==",
229+ "integrity": "sha512-Cq8ToPdc0jQP2C7pjChYctAsEe7+lO/B826ZCK5xFzobuHPiCyJ2Mzx/nEQwCY4SpYkeJQtCbwlCz5iyGW5zGg==",
230 "cpu": [
230 "cpu": [
231 "arm64"
231 "arm64"
232 ],
232 ],
@@ -239,9 +239,9 @@
239 }
239 }
240 },
240 },
241 "node_modules/@next/swc-win32-ia32-msvc": {
241 "node_modules/@next/swc-win32-ia32-msvc": {
242− "version": "12.2.2",
242+ "version": "12.2.3",
243− "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.2.tgz",
243+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.3.tgz",
244− "integrity": "sha512-v7ykeEDbr9eXiblGSZiEYYkWoig6sRhAbLKHUHQtk8vEWWVEqeXFcxmw6LRrKu5rCN1DY357UlYWToCGPQPCRA==",
244+ "integrity": "sha512-BtFq4c8IpeB0sDhJMHJFgm86rPkOvmYI8k3De8Y2kgNVWSeLQ0Q929PWf7e+GqcX1015ei/gEB41ZH8Iw49NzA==",
245 "cpu": [
245 "cpu": [
246 "ia32"
246 "ia32"
247 ],
247 ],
@@ -254,9 +254,9 @@
254 }
254 }
255 },
255 },
256 "node_modules/@next/swc-win32-x64-msvc": {
256 "node_modules/@next/swc-win32-x64-msvc": {
257− "version": "12.2.2",
257+ "version": "12.2.3",
258− "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.2.tgz",
258+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.3.tgz",
259− "integrity": "sha512-2D2iinWUL6xx8D9LYVZ5qi7FP6uLAoWymt8m8aaG2Ld/Ka8/k723fJfiklfuAcwOxfufPJI+nRbT5VcgHGzHAQ==",
259+ "integrity": "sha512-huSNb98KSG77Kl96CoPgCwom28aamuUsPpRmn/4s9L0RNbbHVSkp9E6HA4yOAykZCEuWcdNsRLbVVuAbt8rtIw==",
260 "cpu": [
260 "cpu": [
261 "x64"
261 "x64"
262 ],
262 ],
@@ -309,9 +309,9 @@
309 }
309 }
310 },
310 },
311 "node_modules/@swc/helpers": {
311 "node_modules/@swc/helpers": {
312− "version": "0.4.2",
312+ "version": "0.4.3",
313− "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz",
313+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz",
314− "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==",
314+ "integrity": "sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==",
315 "dependencies": {
315 "dependencies": {
316 "tslib": "^2.4.0"
316 "tslib": "^2.4.0"
317 }
317 }
@@ -596,9 +596,9 @@
596 }
596 }
597 },
597 },
598 "node_modules/caniuse-lite": {
598 "node_modules/caniuse-lite": {
599− "version": "1.0.30001367",
599+ "version": "1.0.30001370",
600− "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz",
600+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz",
601− "integrity": "sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw==",
601+ "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==",
602 "funding": [
602 "funding": [
603 {
603 {
604 "type": "opencollective",
604 "type": "opencollective",
@@ -856,9 +856,9 @@
856 }
856 }
857 },
857 },
858 "node_modules/electron-to-chromium": {
858 "node_modules/electron-to-chromium": {
859− "version": "1.4.194",
859+ "version": "1.4.200",
860− "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.194.tgz",
860+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.200.tgz",
861− "integrity": "sha512-ola5UH0xAP1oYY0FFUsPvwtucEzCQHucXnT7PQ1zjHJMccZhCDktEugI++JUR3YuIs7Ff7afz+OVEhVAIMhLAQ=="
861+ "integrity": "sha512-nPyI7oHc8T64oSqRXrAt99gNMpk0SAgPHw/o+hkNKyb5+bcdnFtZcSO9FUJES5cVkVZvo8u4qiZ1gQILl8UXsA=="
862 },
862 },
863 "node_modules/end-of-stream": {
863 "node_modules/end-of-stream": {
864 "version": "1.4.4",
864 "version": "1.4.4",
@@ -1116,7 +1116,7 @@
1116 },
1116 },
1117 "node_modules/foundation-design-system": {
1117 "node_modules/foundation-design-system": {
1118 "version": "0.0.0",
1118 "version": "0.0.0",
1119− "resolved": "git+ssh://git@github.com/urbit/foundation-design-system.git#a873bc83cf7fa92e0a54429c0be79a1c0157896c",
1119+ "resolved": "git+ssh://git@github.com/urbit/foundation-design-system.git#961fa52e770ed93c5d939621cd3e184ef9dc94dd",
1120 "license": "MIT",
1120 "license": "MIT",
1121 "dependencies": {
1121 "dependencies": {
1122 "@markdoc/markdoc": "0.1.3",
1122 "@markdoc/markdoc": "0.1.3",
@@ -1755,16 +1755,16 @@
1755 }
1755 }
1756 },
1756 },
1757 "node_modules/next": {
1757 "node_modules/next": {
1758− "version": "12.2.2",
1758+ "version": "12.2.3",
1759− "resolved": "https://registry.npmjs.org/next/-/next-12.2.2.tgz",
1759+ "resolved": "https://registry.npmjs.org/next/-/next-12.2.3.tgz",
1760− "integrity": "sha512-zAYFY45aBry/PlKONqtlloRFqU/We3zWYdn2NoGvDZkoYUYQSJC8WMcalS5C19MxbCZLUVCX7D7a6gTGgl2yLg==",
1760+ "integrity": "sha512-TA0tmSA6Dk6S6kfvCNbF7CWYW8468gZUxr/3/30z4KvAQbXnl2ASYZElVe7q/hBW/1F1ee0tSBlHa4/sn+ZIBw==",
1761 "dependencies": {
1761 "dependencies": {
1762− "@next/env": "12.2.2",
1762+ "@next/env": "12.2.3",
1763− "@swc/helpers": "0.4.2",
1763+ "@swc/helpers": "0.4.3",
1764 "caniuse-lite": "^1.0.30001332",
1764 "caniuse-lite": "^1.0.30001332",
1765− "postcss": "8.4.5",
1765+ "postcss": "8.4.14",
1766 "styled-jsx": "5.0.2",
1766 "styled-jsx": "5.0.2",
1767− "use-sync-external-store": "1.1.0"
1767+ "use-sync-external-store": "1.2.0"
1768 },
1768 },
1769 "bin": {
1769 "bin": {
1770 "next": "dist/bin/next"
1770 "next": "dist/bin/next"
@@ -1773,19 +1773,19 @@
1773 "node": ">=12.22.0"
1773 "node": ">=12.22.0"
1774 },
1774 },
1775 "optionalDependencies": {
1775 "optionalDependencies": {
1776− "@next/swc-android-arm-eabi": "12.2.2",
1776+ "@next/swc-android-arm-eabi": "12.2.3",
1777− "@next/swc-android-arm64": "12.2.2",
1777+ "@next/swc-android-arm64": "12.2.3",
1778− "@next/swc-darwin-arm64": "12.2.2",
1778+ "@next/swc-darwin-arm64": "12.2.3",
1779− "@next/swc-darwin-x64": "12.2.2",
1779+ "@next/swc-darwin-x64": "12.2.3",
1780− "@next/swc-freebsd-x64": "12.2.2",
1780+ "@next/swc-freebsd-x64": "12.2.3",
1781− "@next/swc-linux-arm-gnueabihf": "12.2.2",
1781+ "@next/swc-linux-arm-gnueabihf": "12.2.3",
1782− "@next/swc-linux-arm64-gnu": "12.2.2",
1782+ "@next/swc-linux-arm64-gnu": "12.2.3",
1783− "@next/swc-linux-arm64-musl": "12.2.2",
1783+ "@next/swc-linux-arm64-musl": "12.2.3",
1784− "@next/swc-linux-x64-gnu": "12.2.2",
1784+ "@next/swc-linux-x64-gnu": "12.2.3",
1785− "@next/swc-linux-x64-musl": "12.2.2",
1785+ "@next/swc-linux-x64-musl": "12.2.3",
1786− "@next/swc-win32-arm64-msvc": "12.2.2",
1786+ "@next/swc-win32-arm64-msvc": "12.2.3",
1787− "@next/swc-win32-ia32-msvc": "12.2.2",
1787+ "@next/swc-win32-ia32-msvc": "12.2.3",
1788− "@next/swc-win32-x64-msvc": "12.2.2"
1788+ "@next/swc-win32-x64-msvc": "12.2.3"
1789 },
1789 },
1790 "peerDependencies": {
1790 "peerDependencies": {
1791 "fibers": ">= 3.1.0",
1791 "fibers": ">= 3.1.0",
@@ -1815,23 +1815,6 @@
1815 "escalade": "^3.1.1"
1815 "escalade": "^3.1.1"
1816 }
1816 }
1817 },
1817 },
1818− "node_modules/next/node_modules/postcss": {
1819− "version": "8.4.5",
1820− "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
1821− "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
1822− "dependencies": {
1823− "nanoid": "^3.1.30",
1824− "picocolors": "^1.0.0",
1825− "source-map-js": "^1.0.1"
1826− },
1827− "engines": {
1828− "node": "^10 || ^12 || >=14"
1829− },
1830− "funding": {
1831− "type": "opencollective",
1832− "url": "https://opencollective.com/postcss/"
1833− }
1834− },
1835 "node_modules/nice-try": {
1818 "node_modules/nice-try": {
1836 "version": "1.0.5",
1819 "version": "1.0.5",
1837 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1820 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -2883,9 +2866,9 @@
2883 }
2866 }
2884 },
2867 },
2885 "node_modules/use-sync-external-store": {
2868 "node_modules/use-sync-external-store": {
2886− "version": "1.1.0",
2869+ "version": "1.2.0",
2887− "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
2870+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
2888− "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
2871+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
2889 "peerDependencies": {
2872 "peerDependencies": {
2890 "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
2873 "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
2891 }
2874 }
@@ -2976,86 +2959,86 @@
2976 "integrity": "sha512-4n2cobUSeOob+237wZhpNiOEHCSfOydlQnKHTFdRY6ug/DupXGaxkkkszJYQxRftiMs8jmb10XvVO1svEYD43Q=="
2959 "integrity": "sha512-4n2cobUSeOob+237wZhpNiOEHCSfOydlQnKHTFdRY6ug/DupXGaxkkkszJYQxRftiMs8jmb10XvVO1svEYD43Q=="
2977 },
2960 },
2978 "@next/env": {
2961 "@next/env": {
2979− "version": "12.2.2",
2962+ "version": "12.2.3",
2980− "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.2.tgz",
2963+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.3.tgz",
2981− "integrity": "sha512-BqDwE4gDl1F608TpnNxZqrCn6g48MBjvmWFEmeX5wEXDXh3IkAOw6ASKUgjT8H4OUePYFqghDFUss5ZhnbOUjw=="
2964+ "integrity": "sha512-2lWKP5Xcvnor70NaaROZXBvU8z9mFReePCG8NhZw6NyNGnPvC+8s+Cre/63LAB1LKzWw/e9bZJnQUg0gYFRb2Q=="
2982 },
2965 },
2983 "@next/swc-android-arm-eabi": {
2966 "@next/swc-android-arm-eabi": {
2984− "version": "12.2.2",
2967+ "version": "12.2.3",
2985− "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.2.tgz",
2968+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.3.tgz",
2986− "integrity": "sha512-VHjuCHeq9qCprUZbsRxxM/VqSW8MmsUtqB5nEpGEgUNnQi/BTm/2aK8tl7R4D0twGKRh6g1AAeFuWtXzk9Z/vQ==",
2969+ "integrity": "sha512-JxmCW9XB5PYnkGE67BdnBTdqW0SW6oMCiPMHLdjeRi4T3U4JJKJGnjQld99+6TPOfPWigtw3W7Cijp5gc+vJ/w==",
2987 "optional": true
2970 "optional": true
2988 },
2971 },
2989 "@next/swc-android-arm64": {
2972 "@next/swc-android-arm64": {
2990− "version": "12.2.2",
2973+ "version": "12.2.3",
2991− "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.2.tgz",
2974+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.3.tgz",
2992− "integrity": "sha512-v5EYzXUOSv0r9mO/2PX6mOcF53k8ndlu9yeFHVAWW1Dhw2jaJcvTRcCAwYYN8Q3tDg0nH3NbEltJDLKmcJOuVA==",
2975+ "integrity": "sha512-3l4zXpWnzy0fqoedsFRxzMy/eGlMMqn6IwPEuBmtEQ4h7srmQFHyT+Bk+eVHb0o1RQ7/TloAa+mu8JX5tz/5tA==",
2993 "optional": true
2976 "optional": true
2994 },
2977 },
2995 "@next/swc-darwin-arm64": {
2978 "@next/swc-darwin-arm64": {
2996− "version": "12.2.2",
2979+ "version": "12.2.3",
2997− "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.2.tgz",
2980+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.3.tgz",
2998− "integrity": "sha512-JCoGySHKGt+YBk7xRTFGx1QjrnCcwYxIo3yGepcOq64MoiocTM3yllQWeOAJU2/k9MH0+B5E9WUSme4rOCBbpA==",
2981+ "integrity": "sha512-eutDO/RH6pf7+8zHo3i2GKLhF0qaMtxWpY8k3Oa1k+CyrcJ0IxwkfH/x3f75jTMeCrThn6Uu8j3WeZOxvhto1Q==",
2999 "optional": true
2982 "optional": true
3000 },
2983 },
3001 "@next/swc-darwin-x64": {
2984 "@next/swc-darwin-x64": {
3002− "version": "12.2.2",
2985+ "version": "12.2.3",
3003− "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.2.tgz",
2986+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.3.tgz",
3004− "integrity": "sha512-dztDtvfkhUqiqpXvrWVccfGhLe44yQ5tQ7B4tBfnsOR6vxzI9DNPHTlEOgRN9qDqTAcFyPxvg86mn4l8bB9Jcw==",
2987+ "integrity": "sha512-lve+lnTiddXbcT3Lh2ujOFywQSEycTYQhuf6j6JrPu9oLQGS01kjIqqSj3/KMmSoppEnXo3BxkgYu+g2+ecHkA==",
3005 "optional": true
2988 "optional": true
3006 },
2989 },
3007 "@next/swc-freebsd-x64": {
2990 "@next/swc-freebsd-x64": {
3008− "version": "12.2.2",
2991+ "version": "12.2.3",
3009− "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.2.tgz",
2992+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.3.tgz",
3010− "integrity": "sha512-JUnXB+2xfxqsAvhFLPJpU1NeyDsvJrKoOjpV7g3Dxbno2Riu4tDKn3kKF886yleAuD/1qNTUCpqubTvbbT2VoA==",
2993+ "integrity": "sha512-V4bZU1qBFkULTPW53phY8ypioh3EERzHu9YKAasm9RxU4dj+8c/4s60y+kbFkFEEpIUgEU6yNuYZRR4lHHbUGA==",
3011 "optional": true
2994 "optional": true
3012 },
2995 },
3013 "@next/swc-linux-arm-gnueabihf": {
2996 "@next/swc-linux-arm-gnueabihf": {
3014− "version": "12.2.2",
2997+ "version": "12.2.3",
3015− "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.2.tgz",
2998+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.3.tgz",
3016− "integrity": "sha512-XeYC/qqPLz58R4pjkb+x8sUUxuGLnx9QruC7/IGkK68yW4G17PHwKI/1njFYVfXTXUukpWjcfBuauWwxp9ke7Q==",
2999+ "integrity": "sha512-MWxS/i+XSEKdQE0ZmdYkPPrWKBi4JwMVaXdOW9J/T/sZJsHsLlSC9ErBcNolKAJEVka+tnw9oPRyRCKOj+q0sw==",
3017 "optional": true
3000 "optional": true
3018 },
3001 },
3019 "@next/swc-linux-arm64-gnu": {
3002 "@next/swc-linux-arm64-gnu": {
3020− "version": "12.2.2",
3003+ "version": "12.2.3",
3021− "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.2.tgz",
3004+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.3.tgz",
3022− "integrity": "sha512-d6jT8xgfKYFkzR7J0OHo2D+kFvY/6W8qEo6/hmdrTt6AKAqxs//rbbcdoyn3YQq1x6FVUUd39zzpezZntg9Naw==",
3005+ "integrity": "sha512-ikXkqAmvEcWTzIQFDdmrUHLWzdDAF5s2pVsSpQn9rk/gK1i9webH1GRQd2bSM7JLuPBZSaYrNGvDTyHZdSEYlg==",
3023 "optional": true
3006 "optional": true
3024 },
3007 },
3025 "@next/swc-linux-arm64-musl": {
3008 "@next/swc-linux-arm64-musl": {
3026− "version": "12.2.2",
3009+ "version": "12.2.3",
3027− "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.2.tgz",
3010+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.3.tgz",
3028− "integrity": "sha512-rIZRFxI9N/502auJT1i7coas0HTHUM+HaXMyJiCpnY8Rimbo0495ir24tzzHo3nQqJwcflcPTwEh/DV17sdv9A==",
3011+ "integrity": "sha512-wE45gGFkeLLLnCoveKaBrdpYkkypl3qwNF2YhnfvfVK7etuu1O679LwClhCWinDVBr+KOkmyHok00Z+0uI1ycg==",
3029 "optional": true
3012 "optional": true
3030 },
3013 },
3031 "@next/swc-linux-x64-gnu": {
3014 "@next/swc-linux-x64-gnu": {
3032− "version": "12.2.2",
3015+ "version": "12.2.3",
3033− "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.2.tgz",
3016+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.3.tgz",
3034− "integrity": "sha512-ir1vNadlUDj7eQk15AvfhG5BjVizuCHks9uZwBfUgT5jyeDCeRvaDCo1+Q6+0CLOAnYDR/nqSCvBgzG2UdFh9A==",
3017+ "integrity": "sha512-MbFI6413VSXiREzHwYD8YAJLTknBaC+bmjXgdHEEdloeOuBFQGE3NWn3izOCTy8kV+s98VDQO8au7EKKs+bW0g==",
3035 "optional": true
3018 "optional": true
3036 },
3019 },
3037 "@next/swc-linux-x64-musl": {
3020 "@next/swc-linux-x64-musl": {
3038− "version": "12.2.2",
3021+ "version": "12.2.3",
3039− "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.2.tgz",
3022+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.3.tgz",
3040− "integrity": "sha512-bte5n2GzLN3O8JdSFYWZzMgEgDHZmRz5wiispiiDssj4ik3l8E7wq/czNi8RmIF+ioj2sYVokUNa/ekLzrESWw==",
3023+ "integrity": "sha512-jMBD0Va6fInbPih/dNySlNY2RpjkK6MXS+UGVEvuTswl1MZr+iahvurmshwGKpjaRwVU4DSFMD8+gfWxsTFs1Q==",
3041 "optional": true
3024 "optional": true
3042 },
3025 },
3043 "@next/swc-win32-arm64-msvc": {
3026 "@next/swc-win32-arm64-msvc": {
3044− "version": "12.2.2",
3027+ "version": "12.2.3",
3045− "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.2.tgz",
3028+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.3.tgz",
3046− "integrity": "sha512-ZUGCmcDmdPVSAlwJ/aD+1F9lYW8vttseiv4n2+VCDv5JloxiX9aY32kYZaJJO7hmTLNrprvXkb4OvNuHdN22Jg==",
3029+ "integrity": "sha512-Cq8ToPdc0jQP2C7pjChYctAsEe7+lO/B826ZCK5xFzobuHPiCyJ2Mzx/nEQwCY4SpYkeJQtCbwlCz5iyGW5zGg==",
3047 "optional": true
3030 "optional": true
3048 },
3031 },
3049 "@next/swc-win32-ia32-msvc": {
3032 "@next/swc-win32-ia32-msvc": {
3050− "version": "12.2.2",
3033+ "version": "12.2.3",
3051− "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.2.tgz",
3034+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.3.tgz",
3052− "integrity": "sha512-v7ykeEDbr9eXiblGSZiEYYkWoig6sRhAbLKHUHQtk8vEWWVEqeXFcxmw6LRrKu5rCN1DY357UlYWToCGPQPCRA==",
3035+ "integrity": "sha512-BtFq4c8IpeB0sDhJMHJFgm86rPkOvmYI8k3De8Y2kgNVWSeLQ0Q929PWf7e+GqcX1015ei/gEB41ZH8Iw49NzA==",
3053 "optional": true
3036 "optional": true
3054 },
3037 },
3055 "@next/swc-win32-x64-msvc": {
3038 "@next/swc-win32-x64-msvc": {
3056− "version": "12.2.2",
3039+ "version": "12.2.3",
3057− "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.2.tgz",
3040+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.3.tgz",
3058− "integrity": "sha512-2D2iinWUL6xx8D9LYVZ5qi7FP6uLAoWymt8m8aaG2Ld/Ka8/k723fJfiklfuAcwOxfufPJI+nRbT5VcgHGzHAQ==",
3041+ "integrity": "sha512-huSNb98KSG77Kl96CoPgCwom28aamuUsPpRmn/4s9L0RNbbHVSkp9E6HA4yOAykZCEuWcdNsRLbVVuAbt8rtIw==",
3059 "optional": true
3042 "optional": true
3060 },
3043 },
3061 "@nodelib/fs.scandir": {
3044 "@nodelib/fs.scandir": {
@@ -3088,9 +3071,9 @@
3088 "requires": {}
3071 "requires": {}
3089 },
3072 },
3090 "@swc/helpers": {
3073 "@swc/helpers": {
3091− "version": "0.4.2",
3074+ "version": "0.4.3",
3092− "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz",
3075+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz",
3093− "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==",
3076+ "integrity": "sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==",
3094 "requires": {
3077 "requires": {
3095 "tslib": "^2.4.0"
3078 "tslib": "^2.4.0"
3096 }
3079 }
@@ -3274,9 +3257,9 @@
3274 "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
3257 "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
3275 },
3258 },
3276 "caniuse-lite": {
3259 "caniuse-lite": {
3277− "version": "1.0.30001367",
3260+ "version": "1.0.30001370",
3278− "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz",
3261+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz",
3279− "integrity": "sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw=="
3262+ "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g=="
3280 },
3263 },
3281 "chalk": {
3264 "chalk": {
3282 "version": "2.4.2",
3265 "version": "2.4.2",
@@ -3465,9 +3448,9 @@
3465 }
3448 }
3466 },
3449 },
3467 "electron-to-chromium": {
3450 "electron-to-chromium": {
3468− "version": "1.4.194",
3451+ "version": "1.4.200",
3469− "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.194.tgz",
3452+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.200.tgz",
3470− "integrity": "sha512-ola5UH0xAP1oYY0FFUsPvwtucEzCQHucXnT7PQ1zjHJMccZhCDktEugI++JUR3YuIs7Ff7afz+OVEhVAIMhLAQ=="
3453+ "integrity": "sha512-nPyI7oHc8T64oSqRXrAt99gNMpk0SAgPHw/o+hkNKyb5+bcdnFtZcSO9FUJES5cVkVZvo8u4qiZ1gQILl8UXsA=="
3471 },
3454 },
3472 "end-of-stream": {
3455 "end-of-stream": {
3473 "version": "1.4.4",
3456 "version": "1.4.4",
@@ -3650,7 +3633,7 @@
3650 "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
3633 "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
3651 },
3634 },
3652 "foundation-design-system": {
3635 "foundation-design-system": {
3653− "version": "git+ssh://git@github.com/urbit/foundation-design-system.git#a873bc83cf7fa92e0a54429c0be79a1c0157896c",
3636+ "version": "git+ssh://git@github.com/urbit/foundation-design-system.git#961fa52e770ed93c5d939621cd3e184ef9dc94dd",
3654 "from": "foundation-design-system@github:urbit/foundation-design-system",
3637 "from": "foundation-design-system@github:urbit/foundation-design-system",
3655 "requires": {
3638 "requires": {
3656 "@markdoc/markdoc": "0.1.3",
3639 "@markdoc/markdoc": "0.1.3",
@@ -4108,41 +4091,29 @@
4108 "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
4091 "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
4109 },
4092 },
4110 "next": {
4093 "next": {
4111− "version": "12.2.2",
4094+ "version": "12.2.3",
4112− "resolved": "https://registry.npmjs.org/next/-/next-12.2.2.tgz",
4095+ "resolved": "https://registry.npmjs.org/next/-/next-12.2.3.tgz",
4113− "integrity": "sha512-zAYFY45aBry/PlKONqtlloRFqU/We3zWYdn2NoGvDZkoYUYQSJC8WMcalS5C19MxbCZLUVCX7D7a6gTGgl2yLg==",
4096+ "integrity": "sha512-TA0tmSA6Dk6S6kfvCNbF7CWYW8468gZUxr/3/30z4KvAQbXnl2ASYZElVe7q/hBW/1F1ee0tSBlHa4/sn+ZIBw==",
4114 "requires": {
4097 "requires": {
4115− "@next/env": "12.2.2",
4098+ "@next/env": "12.2.3",
4116− "@next/swc-android-arm-eabi": "12.2.2",
4099+ "@next/swc-android-arm-eabi": "12.2.3",
4117− "@next/swc-android-arm64": "12.2.2",
4100+ "@next/swc-android-arm64": "12.2.3",
4118− "@next/swc-darwin-arm64": "12.2.2",
4101+ "@next/swc-darwin-arm64": "12.2.3",
4119− "@next/swc-darwin-x64": "12.2.2",
4102+ "@next/swc-darwin-x64": "12.2.3",
4120− "@next/swc-freebsd-x64": "12.2.2",
4103+ "@next/swc-freebsd-x64": "12.2.3",
4121− "@next/swc-linux-arm-gnueabihf": "12.2.2",
4104+ "@next/swc-linux-arm-gnueabihf": "12.2.3",
4122− "@next/swc-linux-arm64-gnu": "12.2.2",
4105+ "@next/swc-linux-arm64-gnu": "12.2.3",
4123− "@next/swc-linux-arm64-musl": "12.2.2",
4106+ "@next/swc-linux-arm64-musl": "12.2.3",
4124− "@next/swc-linux-x64-gnu": "12.2.2",
4107+ "@next/swc-linux-x64-gnu": "12.2.3",
4125− "@next/swc-linux-x64-musl": "12.2.2",
4108+ "@next/swc-linux-x64-musl": "12.2.3",
4126− "@next/swc-win32-arm64-msvc": "12.2.2",
4109+ "@next/swc-win32-arm64-msvc": "12.2.3",
4127− "@next/swc-win32-ia32-msvc": "12.2.2",
4110+ "@next/swc-win32-ia32-msvc": "12.2.3",
4128− "@next/swc-win32-x64-msvc": "12.2.2",
4111+ "@next/swc-win32-x64-msvc": "12.2.3",
4129− "@swc/helpers": "0.4.2",
4112+ "@swc/helpers": "0.4.3",
4130 "caniuse-lite": "^1.0.30001332",
4113 "caniuse-lite": "^1.0.30001332",
4131− "postcss": "8.4.5",
4114+ "postcss": "8.4.14",
4132 "styled-jsx": "5.0.2",
4115 "styled-jsx": "5.0.2",
4133− "use-sync-external-store": "1.1.0"
4116+ "use-sync-external-store": "1.2.0"
4134− },
4135− "dependencies": {
4136− "postcss": {
4137− "version": "8.4.5",
4138− "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
4139− "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
4140− "requires": {
4141− "nanoid": "^3.1.30",
4142− "picocolors": "^1.0.0",
4143− "source-map-js": "^1.0.1"
4144− }
4145− }
4146 }
4117 }
4147 },
4118 },
4148 "next-transpile-modules": {
4119 "next-transpile-modules": {
@@ -4866,9 +4837,9 @@
4866 }
4837 }
4867 },
4838 },
4868 "use-sync-external-store": {
4839 "use-sync-external-store": {
4869− "version": "1.1.0",
4840+ "version": "1.2.0",
4870− "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
4841+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
4871− "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
4842+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
4872 "requires": {}
4843 "requires": {}
4873 },
4844 },
4874 "util-deprecate": {
4845 "util-deprecate": {
pages/applications/[[...application]].js+37−16
@@ -1,6 +1,6 @@
1import Head from "next/head";
1import Head from "next/head";
2import Link from "next/link";
2import Link from "next/link";
3−import { getPage } from "../../lib/lib";
3+import { getPage, getAllPosts } from "../../lib/lib";
4import { join } from "path";
4import { join } from "path";
5import CopyLink from "../../components/CopyLink";
5import CopyLink from "../../components/CopyLink";
6import {
6import {
@@ -16,7 +16,7 @@ import MetadataBlock from "../../components/gateway/MetadataBlock";
16import MetadataLink from "../../components/gateway/MetadataLink";
16import MetadataLink from "../../components/gateway/MetadataLink";
17import Description from "../../components/gateway/Description";
17import Description from "../../components/gateway/Description";
18
18
19−const ApplicationPage = ({ data, markdown, params }) => {
19+const ApplicationPage = ({ data, markdown, organisation, params }) => {
20 const { application } = params;
20 const { application } = params;
21 if (!ob.isValidPatp(application[0])) {
21 if (!ob.isValidPatp(application[0])) {
22 return <Gateway404 type="application" />;
22 return <Gateway404 type="application" />;
@@ -29,6 +29,31 @@ const ApplicationPage = ({ data, markdown, params }) => {
29 data.title
29 data.title
30 }.png?${reqParams.join("&")}`;
30 }.png?${reqParams.join("&")}`;
31
31
32+ let devLink;
33+
34+ if (organisation) {
35+ devLink = (
36+ <MetadataLink
37+ title="Developer"
38+ href={`/organizations/${organisation.slug}`}
39+ content={organisation.title}
40+ />
41+ );
42+ } else {
43+ devLink =
44+ ob.isValidPatp(data?.developer || "") && data?.developer.length <= 14 ? (
45+ <MetadataLink
46+ title="Developer"
47+ href={`/ids/${data.developer}`}
48+ content={data.developer}
49+ />
50+ ) : (
51+ <MetadataBlock
52+ title="Developer"
53+ content={data.developer ? data.developer : "Unknown"}
54+ />
55+ );
56+ }
32 return (
57 return (
33 <Container>
58 <Container>
34 <Head>
59 <Head>
@@ -76,19 +101,7 @@ const ApplicationPage = ({ data, markdown, params }) => {
76 }
101 }
77 />
102 />
78 )}
103 )}
79− {ob.isValidPatp(data?.developer || "") &&
104+ {devLink}
80− data?.developer.length <= 14 ? (
81− <MetadataLink
82− title="Developer"
83− href={`/ids/${data.developer}`}
84− content={data.developer}
85− />
86− ) : (
87− <MetadataBlock
88− title="Developer"
89− content={data.developer ? data.developer : "Unknown"}
90− />
91− )}
92 <CopyLink
105 <CopyLink
93 className="basis-1/2 sm:basis-1/4"
106 className="basis-1/2 sm:basis-1/4"
94 content={data.shortcode ? data.shortcode : data.title}
107 content={data.shortcode ? data.shortcode : data.title}
@@ -119,7 +132,9 @@ const ApplicationPage = ({ data, markdown, params }) => {
119 urbit.org?
132 urbit.org?
120 </p>
133 </p>
121 <Link href="/applications/submit" passHref>
134 <Link href="/applications/submit" passHref>
122− <a className="font-bold text-green-400">Submit your application</a>
135+ <a className="font-bold text-green-400">
136+ Submit your application
137+ </a>
123 </Link>
138 </Link>
124 </div>
139 </div>
125 <Link href="/" passHref>
140 <Link href="/" passHref>
@@ -145,6 +160,11 @@ export const getServerSideProps = async ({ params, res }) => {
145 )
160 )
146 ) || { data: {}, content: "" };
161 ) || { data: {}, content: "" };
147
162
163+ const organisation =
164+ getAllPosts(["title", "slug", "ships"], "organizations").filter((e) =>
165+ e.ships.includes(params.application?.[0])
166+ )[0] || null;
167+
148 const markdown =
168 const markdown =
149 content !== ""
169 content !== ""
150 ? JSON.stringify(Markdown.parse({ post: { content } }))
170 ? JSON.stringify(Markdown.parse({ post: { content } }))
@@ -161,6 +181,7 @@ export const getServerSideProps = async ({ params, res }) => {
161 props: {
181 props: {
162 data,
182 data,
163 markdown,
183 markdown,
184+ organisation,
164 params,
185 params,
165 },
186 },
166 };
187 };
pages/blog/[slug].js+2−6
@@ -68,12 +68,8 @@ export default function Post({
68 </Section>
68 </Section>
69 <Section wide className="flex">
69 <Section wide className="flex">
70 <TwoUp>
70 <TwoUp>
71− {nextPost ? (
72− <PostPreview title="Next Post" post={nextPost} />
71+ {nextPost ? <PostPreview post={nextPost} /> : null}
73− ) : null}
74− {previousPost ? (
75− <PostPreview title="Previous Post" post={previousPost} />
72+ {previousPost ? <PostPreview post={previousPost} /> : null}
76− ) : null}
77 </TwoUp>
73 </TwoUp>
78 </Section>
74 </Section>
79 </SingleColumn>
75 </SingleColumn>
pages/ecosystem/index.js+43−28
@@ -1,6 +1,3 @@
1−// All sections in one template
2−// Grid-columns-three
3−// Get content from content/ecosystem/spotlight, content/applications, content/marketplaces, content/organizations, content/podcasts, content/groups
4import { useRouter } from "next/router";
1import { useRouter } from "next/router";
5import Head from "next/head";
2import Head from "next/head";
6import Meta from "../../components/Meta";
3import Meta from "../../components/Meta";
@@ -100,9 +97,12 @@ export default function Ecosystem({
100 </a>
97 </a>
101 </Link>
98 </Link>
102
99
103− <div className="pt-36">
100+ <div className="pt-36">
104 <h3 className="pb-2">Urbit Monthly</h3>
101 <h3 className="pb-2">Urbit Monthly</h3>
102+ <p className="pb-8">
105− <p className="pb-8">Get the Spotlight in your inbox along with updates on everything Urbit.</p>
103+ Get the Spotlight in your inbox along with updates on
104+ everything Urbit.
105+ </p>
106 <Contact emphasize className="w-full" />
106 <Contact emphasize className="w-full" />
107 </div>
107 </div>
108 </>
108 </>
@@ -111,15 +111,14 @@ export default function Ecosystem({
111 className={classnames("grid gap-12 w-full", {
111 className={classnames("grid gap-12 w-full", {
112 "grid-cols-2 md:grid-cols-3": type !== "podcasts",
112 "grid-cols-2 md:grid-cols-3": type !== "podcasts",
113 "grid-cols-1": type === "podcasts",
113 "grid-cols-1": type === "podcasts",
114− "grid-cols-1 md:grid-cols-1": type === "applications",
114+ "grid-cols-1 md:grid-cols-2": type === "applications",
115 hidden: type === undefined,
115 hidden: type === undefined,
116 })}
116 })}
117 >
117 >
118−
119 {type === "organizations" &&
118 {type === "organizations" &&
120 organizations.map((org) => (
119 organizations.map((org) => (
121 <Link href={`/organizations/${org.slug}`}>
120 <Link href={`/organizations/${org.slug}`}>
122− <div className="flex flex-col space-y-4 justify-center items-center cursor-pointer">
121+ <div className="flex flex-col space-y-4 justify-center items-center cursor-pointer hover:opacity-90">
123 <img className="w-36" src={org.image} />
122 <img className="w-36" src={org.image} />
124 <p className="text-center font-bold">{org.title}</p>
123 <p className="text-center font-bold">{org.title}</p>
125 </div>
124 </div>
@@ -128,20 +127,25 @@ export default function Ecosystem({
128 {type === "applications" &&
127 {type === "applications" &&
129 applications.map((app) => (
128 applications.map((app) => (
130 <Link href={`/applications/${app.ship}/${app.slug}`}>
129 <Link href={`/applications/${app.ship}/${app.slug}`}>
131− <div className="flex space-x-4 items-center cursor-pointer ">
130+ <div className="flex space-x-4 items-center cursor-pointer hover:opacity-90">
132 <div
131 <div
133− className="h-36 w-36 rounded-xl items-center justify-center"
132+ className="h-36 w-36 rounded-xl items-center justify-center shrink-0 overflow-hidden"
134 style={{
133 style={{
135 backgroundColor: app?.bgColor || "rgba(0,0,0,0)",
134 backgroundColor: app?.bgColor || "rgba(0,0,0,0)",
136 }}
135 }}
137 >
136 >
138 {app?.image && (
137 {app?.image && (
138+ <img
139− <img className="items-center" src={app.image} />
139+ className="items-center h-36 w-36"
140+ src={app.image}
141+ />
140 )}
142 )}
141 </div>
143 </div>
142 <div className="">
144 <div className="">
143− <p className="text-left font-bold">{app.title}</p>
145+ <p className="text-left font-bold">{app.title}</p>
144− <p className="text-left text-wall-400 font-light">{app.description}</p>
146+ <p className="text-left text-wall-400 font-light">
147+ {app.description}
148+ </p>
145 </div>
149 </div>
146 </div>
150 </div>
147 </Link>
151 </Link>
@@ -149,7 +153,7 @@ export default function Ecosystem({
149 {type === "marketplaces" &&
153 {type === "marketplaces" &&
150 marketplaces.map((market) => (
154 marketplaces.map((market) => (
151 <Link href={`/marketplaces/${market.slug}`}>
155 <Link href={`/marketplaces/${market.slug}`}>
152− <div className="flex flex-col space-y-4 justify-center items-center cursor-pointer">
156+ <div className="flex flex-col space-y-4 justify-center items-center cursor-pointer hover:opacity-90">
153 <img className="w-36" src={market.image} />
157 <img className="w-36" src={market.image} />
154 <p className="text-center font-bold">{market.title}</p>
158 <p className="text-center font-bold">{market.title}</p>
155 </div>
159 </div>
@@ -158,14 +162,16 @@ export default function Ecosystem({
158 {type === "podcasts" &&
162 {type === "podcasts" &&
159 podcasts.map((pod) => (
163 podcasts.map((pod) => (
160 <Link href={`/podcasts/${pod.slug}`}>
164 <Link href={`/podcasts/${pod.slug}`}>
161− <div className="flex cursor-pointer space-x-4 items-center">
165+ <div className="flex cursor-pointer space-x-4 items-center hover:opacity-90">
162 <img className="w-28" src={pod.image} />
166 <img className="w-28" src={pod.image} />
163 <div className="flex flex-col space-y-2 min-w-0">
167 <div className="flex flex-col space-y-2 min-w-0">
164 <p className="font-bold">{pod.podcast}</p>
168 <p className="font-bold">{pod.podcast}</p>
165 <p className="min-w-0 min-h-0 leading-5 ">
169 <p className="min-w-0 min-h-0 leading-5 ">
166 {pod.title}
170 {pod.title}
167 </p>
171 </p>
168− <p className="text-wall-400">{pod.date}</p>
172+ <p className="text-wall-400">
173+ {formatDate(generateDisplayDate(pod.date))}
174+ </p>
169 </div>
175 </div>
170 </div>
176 </div>
171 </Link>
177 </Link>
@@ -173,8 +179,6 @@ export default function Ecosystem({
173 </div>
179 </div>
174 </div>
180 </div>
175 </div>
181 </div>
176−
177−
178 </Section>
182 </Section>
179 </SingleColumn>
183 </SingleColumn>
180 <Footer />
184 <Footer />
@@ -312,19 +316,11 @@ export async function getStaticProps({}) {
312 "ecosystem/spotlight",
316 "ecosystem/spotlight",
313 "date"
317 "date"
314 )[0];
318 )[0];
315− ["featured-1", "featured-2", "featured-3"].forEach((feat) => {
316− if (post?.[feat]) {
317− post[feat].content = JSON.stringify(
318− Markdown.parse({
319− post: { content: post[feat].content },
320− })
321− );
322− }
323− });
324 const marketplaces = getAllPosts(["title", "image", "slug"], "marketplaces");
319 const marketplaces = getAllPosts(["title", "image", "slug"], "marketplaces");
325 const podcasts = getAllPosts(
320 const podcasts = getAllPosts(
326 ["title", "image", "date", "podcast", "slug"],
321 ["title", "image", "date", "podcast", "slug"],
327− "podcasts"
322+ "podcasts",
323+ "date"
328 );
324 );
329 const organizations = getAllPosts(
325 const organizations = getAllPosts(
330 ["title", "image", "slug"],
326 ["title", "image", "slug"],
@@ -350,6 +346,25 @@ export async function getStaticProps({}) {
350 return nameA < nameB ? -1 : 1;
346 return nameA < nameB ? -1 : 1;
351 });
347 });
352
348
349+ ["featured-1", "featured-2", "featured-3"].forEach((feat) => {
350+ if (post?.[feat]) {
351+ const matchedPost = [
352+ ...applications.map((e) => ({ ...e, type: "Application" })),
353+ ...organizations.map((e) => ({ ...e, type: "Organization" })),
354+ ...podcasts.map((e) => ({ ...e, type: "Podcast" })),
355+ ...marketplaces.map((e) => ({ ...e, type: "Marketplace" })),
356+ ].filter((e) => e.title === post[feat].title)?.[0];
357+ post[feat].image = post[feat].image || matchedPost?.image;
358+ post[feat].type = matchedPost?.type || "Podcast";
359+ post[feat].matchedPost = matchedPost || null;
360+ post[feat].content = JSON.stringify(
361+ Markdown.parse({
362+ post: { content: post[feat].content },
363+ })
364+ );
365+ }
366+ });
367+
353 return {
368 return {
354 props: { posts, post, applications, marketplaces, podcasts, organizations },
369 props: { posts, post, applications, marketplaces, podcasts, organizations },
355 };
370 };
pages/index.js+53−13
@@ -17,7 +17,8 @@ import TwoUp from "../components/TwoUp";
17import { getAllPosts, getAllEvents, generateRealtimeDate } from "../lib/lib";
17import { getAllPosts, getAllEvents, generateRealtimeDate } from "../lib/lib";
18import { eventKeys } from "../lib/constants";
18import { eventKeys } from "../lib/constants";
19import IndexCard from "../components/ecosystem/IndexCard";
19import IndexCard from "../components/ecosystem/IndexCard";
20−
20+import fs from "fs";
21+import path from "path";
21
22
22export default function Home({
23export default function Home({
23 posts,
24 posts,
@@ -101,11 +102,9 @@ export default function Home({
101 if (ecosystem?.[feat]) {
102 if (ecosystem?.[feat]) {
102 return (
103 return (
103 <IndexCard
104 <IndexCard
104− slug={
105− ecosystem[feat].type === "Application"
105+ slug={`/ecosystem/#${ecosystem[feat]?.title
106− ? `/ids/${ecosystem[feat].URL}`
106+ .toLowerCase()
107− : ecosystem[feat].URL
107+ .replace(/ /, "-")}`}
108− }
109 feat={ecosystem[feat]}
108 feat={ecosystem[feat]}
110 />
109 />
111 );
110 );
@@ -228,7 +227,7 @@ export default function Home({
228 </TwoUp>
227 </TwoUp>
229
228
230 <Link href="/blog" passHref>
229 <Link href="/blog" passHref>
231− <a className="button-lg max-w-fit type-ui text-white bg-green-400">
230+ <a className="button-lg max-w-fit type-ui text-white bg-green-400 z-10">
232 See More
231 See More
233 </a>
232 </a>
234 </Link>
233 </Link>
@@ -254,17 +253,12 @@ export default function Home({
254 </Link>
253 </Link>
255 </Section>
254 </Section>
256
255
257−
258 <Section narrow>
256 <Section narrow>
259−
260 <h3 className="pb-2">Urbit Monthly</h3>
257 <h3 className="pb-2">Urbit Monthly</h3>
261 <p className="pb-8">Get monthly email updates on all things Urbit.</p>
258 <p className="pb-8">Get monthly email updates on all things Urbit.</p>
262
259
263−
264 <Contact emphasize />
260 <Contact emphasize />
265 </Section>
261 </Section>
266−
267−
268 </SingleColumn>
262 </SingleColumn>
269 <Footer />
263 <Footer />
270 </Container>
264 </Container>
@@ -272,20 +266,64 @@ export default function Home({
272}
266}
273
267
274export async function getStaticProps() {
268export async function getStaticProps() {
269+ // Latest blog posts
275 const posts = getAllPosts(
270 const posts = getAllPosts(
276 ["title", "slug", "date", "description", "extra"],
271 ["title", "slug", "date", "description", "extra"],
277 "blog",
272 "blog",
278 "date"
273 "date"
279 );
274 );
280
275
276+ // Pull all latest ecosystem information
281 const ecosystem = getAllPosts(
277 const ecosystem = getAllPosts(
282 ["featured-1", "featured-2", "featured-3"],
278 ["featured-1", "featured-2", "featured-3"],
283 "ecosystem/spotlight",
279 "ecosystem/spotlight",
284 "date"
280 "date"
285 )[0];
281 )[0];
286
282
287− const events = getAllEvents(eventKeys, "events");
283+ const marketplaces = getAllPosts(["title", "image", "slug"], "marketplaces");
284+ const podcasts = getAllPosts(
285+ ["title", "image", "date", "podcast", "slug"],
286+ "podcasts",
287+ "date"
288+ );
289+ const organizations = getAllPosts(
290+ ["title", "image", "slug"],
291+ "organizations"
292+ );
293+ const applications = fs
294+ .readdirSync(path.join(process.cwd(), "content/applications"), {
295+ withFileTypes: true,
296+ })
297+ .filter((f) => f.isDirectory())
298+ .map((dir) =>
299+ getAllPosts(
300+ ["title", "bgColor", "image", "slug", "description"],
301+ `applications/${dir.name}`
302+ )
303+ .map((e) => ({ ...e, ship: dir.name }))
304+ .flat()
305+ )
306+ .flat()
307+ .sort((a, b) => {
308+ const nameA = a.title.toLowerCase();
309+ const nameB = b.title.toLowerCase();
310+ return nameA < nameB ? -1 : 1;
311+ });
312+
313+ ["featured-1", "featured-2", "featured-3"].forEach((feat) => {
314+ if (ecosystem?.[feat]) {
315+ const matchedPost = [
316+ ...applications.map((e) => ({ ...e, type: "Application" })),
317+ ...organizations.map((e) => ({ ...e, type: "Organization" })),
318+ ...podcasts.map((e) => ({ ...e, type: "Podcast" })),
319+ ...marketplaces.map((e) => ({ ...e, type: "Marketplace" })),
320+ ].filter((e) => e.title === ecosystem[feat].title)?.[0];
321+ ecosystem[feat].image = ecosystem[feat].image || matchedPost?.image;
322+ ecosystem[feat].type = matchedPost?.type || "Podcast";
323+ }
324+ });
288
325
326+ // Latest grants
289 const grants = getAllPosts(["extra", "taxonomies"], "grants", "date");
327 const grants = getAllPosts(["extra", "taxonomies"], "grants", "date");
290
328
291 const grantNumbers = {
329 const grantNumbers = {
@@ -308,6 +346,8 @@ export async function getStaticProps() {
308 ).length,
346 ).length,
309 };
347 };
310
348
349+ // Latest events
350+ const events = getAllEvents(eventKeys, "events");
311 const now = DateTime.now();
351 const now = DateTime.now();
312
352
313 const pastEvents = events.filter((event) => {
353 const pastEvents = events.filter((event) => {