Skip to content

Commit

Permalink
Add tech list
Browse files Browse the repository at this point in the history
  • Loading branch information
lvonlanthen committed Dec 17, 2024
1 parent 5f2c7e7 commit bc0dd78
Show file tree
Hide file tree
Showing 4 changed files with 206 additions and 12 deletions.
135 changes: 128 additions & 7 deletions shared/locales/en/website-techstack.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,137 @@
"hero": {
"title-1": [
{
"text": "Hello ",
"color": "accent"
"text": "To work efficiently and effectively, "
},
{
"text": "Hallo."
"text": "we rely on the right tools.",
"color": "accent"
}
],
"subtitle": "Guten Tag"
"subtitle": "At Social Income, donated tech and software play a crucial role in driving our mission forward."
},
"badges": {
"donated": "Donated"
},
"cards": {
"title-1": "Vercel"
}
"cards": [
{
"title": "Google Suite",
"description": "We use the tools to organize and communicate. Thanks to Google Nonprofit, this is free for us.",
"link": "https://www.google.com/nonprofits/",
"logo": "google-nonprofit.png",
"donated": true
},
{
"title": "GitHub",
"description": "We use GitHub to collaborate on code; without it, maintaining an open-source approach would be difficult.",
"link": "https://socialimpact.github.com/",
"logo": "",
"donated": false
},
{
"title": "Codemagic",
"description": "We use Codemagic to simplify app builds and reduce deployment complexity.",
"link": "https://codemagic.io/start/",
"logo": "",
"donated": false
},
{
"title": "Linktree",
"description": "We use Linktree to keep all our social media links in one accessible place.",
"link": "https://linktr.ee/",
"logo": "",
"donated": false
},
{
"title": "Twilio",
"description": "We use Twilio to send newsletters and transactional emails to donors, ensuring reliable communication.",
"link": "https://twilio.org/",
"logo": "",
"donated": false
},
{
"title": "Algolia",
"description": "We use Algolia to enable fast and accurate search within our admin tool.",
"link": "https://www.algolia.com/",
"logo": "",
"donated": false
},
{
"title": "JetBrains",
"description": "We use JetBrains to write code and review open-source contributions efficiently.",
"link": "https://www.jetbrains.com/",
"logo": "",
"donated": false
},
{
"title": "1Password",
"description": "We use 1Password to keep our team’s credentials secure and easy to access when needed.",
"link": "https://1password.com/",
"logo": "",
"donated": false
},
{
"title": "Mux",
"description": "We use Mux to provide fast and adaptable video experiences to website users.",
"link": "https://www.mux.com/",
"logo": "",
"donated": false
},
{
"title": "Sentry",
"description": "We use Sentry to monitor, identify, and fix issues across all our tools, improving reliability.",
"link": "https://sentry.io/",
"logo": "",
"donated": false
},
{
"title": "Unica77",
"description": "We use Unica77, a donated font by Lineto, to give our platform a distinctive and professional look.",
"link": "https://lineto.com/typefaces/unica77",
"logo": "",
"donated": false
},
{
"title": "FireCMS",
"description": "We use FireCMS to manage our Firestore data and run the admin tool seamlessly.",
"link": "https://firecms.co/",
"logo": "",
"donated": false
},
{
"title": "Storybook",
"description": "We use Storybook to maintain a consistent and cohesive design across components.",
"link": "https://storybook.js.org/",
"logo": "",
"donated": false
},
{
"title": "Tailwind CSS",
"description": "We use Tailwind CSS to style quickly and flexibly, adapting to our evolving needs.",
"link": "https://tailwindcss.com/",
"logo": "",
"donated": false
},
{
"title": "Shadcn",
"description": "We use Shadcn components because they offer a great balance of simplicity and versatility.",
"link": "https://ui.shadcn.com/",
"logo": "",
"donated": false
},
{
"title": "TypeScript",
"description": "We use TypeScript to write safer and more maintainable code with fewer bugs.",
"link": "https://www.typescriptlang.org/",
"logo": "",
"donated": false
},
{
"title": "Next.js",
"description": "We use Next.js to deploy our website as fast as possible.",
"link": "https://nextjs.org/",
"logo": "",
"donated": false
}
]
}
Binary file added website/public/assets/tech/google-nonprofit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { Badge, Card, CardContent, CardHeader, CardTitle, Typography } from '@socialincome/ui';
import Image from 'next/image';
import Link from 'next/link';

type TechCardTranslations = {
badgeDonated: string;
}

type TechCardProps = {
title: string;
description: string;
link: string;
logo: string;
donated: boolean;
translations: TechCardTranslations;
};

function getLogoSrc(logo: string) {
const image_base_path = '/assets/tech/';
return image_base_path.concat(logo);
}

export default function TechCard({ title, description, link, logo, donated, translations }: TechCardProps) {
return (
<Card className="hover:bg-primary max-w-lg rounded-lg p-6 shadow-none hover:bg-opacity-10">
<Link href={link} target="_blank" rel="noreferrer" className="flex flex-col gap-6 sm:flex-row">
{!!logo && (
<div className="w-fit basis-1/4 self-center">
<Image
src={getLogoSrc(logo)}
alt={title}
className="mx-auto w-1/2 rounded-sm sm:w-full"
width="48"
height="48"
unoptimized
/>
</div>
)}
<div className={'' + (!!logo ? 'w-fit basis-3/4' : '')}>
{donated && (
<Badge className="bg-accent hover:bg-accent text-primary text-md float-right -m-3 border-none">
<Typography size="md" weight="normal" className="p-1">
{translations.badgeDonated}
</Typography>
</Badge>
)}
<CardHeader className="p-0">
<CardTitle className="flex items-center justify-between">
<Typography size="2xl" weight="medium">
{title}
</Typography>
</CardTitle>
</CardHeader>
<CardContent className="my-4 p-0">
<Typography size="lg">{description}</Typography>
</CardContent>
</div>
</Link>
</Card>
);
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
import { DefaultParams } from '@/app/[lang]/[region]';
import TechCard from '@/app/[lang]/[region]/(website)/techstack/(sections)/techcard';
import { Translator } from '@socialincome/shared/src/utils/i18n';
import { Typography } from '@socialincome/ui';

type TechEntryJSON = {
title: string;
description: string;
link: string;
logo: string;
donated: boolean;
};

export async function TechList({ lang }: DefaultParams) {
const translator = await Translator.getInstance({
language: lang,
namespaces: ['website-techstack'],
});

const techArray: TechEntryJSON[] = translator.t('cards');

return (
<div>
<Typography color="accent" className="text-center">
{translator.t('cards.title-1')}
</Typography>
<div className="mx-auto max-w-6xl">
<div className="grid grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-2">
{techArray.map((techEntry, index) => (
<TechCard {...techEntry} translations={{badgeDonated: translator.t('badges.donated')}} key={index} />
))}
</div>
</div>
);
}

0 comments on commit bc0dd78

Please sign in to comment.