@@ -25,6 +25,7 @@ export default function Ecosystem({
27 applications,
27 applications,
28 marketplaces,
29 marketplaces,
29 organizations,
30 organizations,
@@ -113,7 +114,7 @@ export default function Ecosystem({
113 "grid-cols-2 md:grid-cols-3": type !== "podcasts",
114 "grid-cols-2 md:grid-cols-3": type !== "podcasts",
114 "grid-cols-1": type === "podcasts",
115 "grid-cols-1": type === "podcasts",
115 "grid-cols-1 md:grid-cols-1 lg:grid-cols-1 xl:grid-cols-2":
116 "grid-cols-1 md:grid-cols-1 lg:grid-cols-1 xl:grid-cols-2":
116− type === "applications",
117+ type === "applications" || type === "groups",
117 hidden: type === undefined,
118 hidden: type === undefined,
@@ -153,6 +154,34 @@ export default function Ecosystem({
157+ {type === "groups" &&
158+ groups.map((group) => (
159+ <Link href={`/groups/${group.ship}/${group.slug}`}>
160+ <div className="flex space-x-4 items-center cursor-pointer hover:opacity-90">
162+ className="h-36 w-36 rounded-xl items-center justify-center shrink-0 overflow-hidden"
164+ backgroundColor: group?.tile?.startsWith("#")
169+ {!group?.tile?.startsWith("#") && (
171+ className="items-center h-36 w-36"
177+ <p className="text-left font-bold">{group.title}</p>
178+ <p className="text-left text-wall-400 font-light">
156 {type === "marketplaces" &&
185 {type === "marketplaces" &&
157 marketplaces.map((market) => (
186 marketplaces.map((market) => (
158 <Link href={`/marketplaces/${market.slug}`}>
187 <Link href={`/marketplaces/${market.slug}`}>
@@ -232,6 +261,13 @@ function EcosystemSidebar() {
233 Applications
262 Applications
234 </ActiveLink>
263 </ActiveLink>
265+ currentPath={currentPath}
267+ href="/ecosystem?type=groups"
235 <ActiveLink
271 <ActiveLink
236 currentPath={currentPath}
272 currentPath={currentPath}
237 className="type-ui"
273 className="type-ui"
@@ -348,6 +384,25 @@ export async function getStaticProps({}) {
348 const nameB = b.title.toLowerCase();
384 const nameB = b.title.toLowerCase();
349 return nameA < nameB ? -1 : 1;
385 return nameA < nameB ? -1 : 1;
388+ .readdirSync(path.join(process.cwd(), "content/groups"), {
389+ withFileTypes: true,
391+ .filter((f) => f.isDirectory())
394+ ["title", "tile", "slug", "description"],
395+ `groups/${dir.name}`
397+ .map((e) => ({ ...e, ship: dir.name }))
402+ const nameA = a.title.toLowerCase();
403+ const nameB = b.title.toLowerCase();
404+ return nameA < nameB ? -1 : 1;
352 ["featured-1", "featured-2", "featured-3"].forEach((feat) => {
407 ["featured-1", "featured-2", "featured-3"].forEach((feat) => {
353 if (post?.[feat]) {
408 if (post?.[feat]) {
@@ -369,6 +424,14 @@ export async function getStaticProps({}) {
372− props: { posts, post, applications, marketplaces, podcasts, organizations },
427+ props: {