Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
86545ac
🎨 move landing page layout w/ placeholders #132
Masahiro-jobson Apr 6, 2026
36dffc2
Merge branch 'develop' into feature/#132/landing-page-layout
Masahiro-jobson Apr 9, 2026
42f9b9c
Merge branch 'develop' into feature/#132/landing-page-layout
arturasmckwcz Apr 9, 2026
268af1f
🎨 feat: layout structure #132
Masahiro-jobson Apr 13, 2026
d85fed1
🎨 feat: landing page layout and testimonial integration #132
Masahiro-jobson Apr 13, 2026
a585297
fix: resolve merge conflicts and merge develop into #132
Masahiro-jobson Apr 13, 2026
a9abe27
🐛 Add missing favicon.ico to fix i18next language log
ivannissimrch Apr 14, 2026
8ac4be1
Fix Opportunity card: Schedule #259
lourooo Apr 14, 2026
d7d23a5
fix: redirect /event-page to Google Forms URL (#312)
Cy-fox Apr 15, 2026
832531f
Merge pull request #317 from Cy-fox/fix/event-page-redirect-312
need4deed Apr 15, 2026
568d3c6
ix: back button navigates to correct list page (#318)
lourooo Apr 15, 2026
c85594b
fix: set English as default language and persist language choice (#303)
Cy-fox Apr 15, 2026
471cb60
fix: use undefined instead of null for availability in event type
lourooo Apr 15, 2026
52eb9d8
Merge branch 'develop' into lourooo-fix-Opportunity-card
lourooo Apr 15, 2026
c2c8717
fix: simplify back button href to use relative path
lourooo Apr 15, 2026
24d725e
Merge branch 'develop' into fix/default-language-english-303
Cy-fox Apr 15, 2026
e44455f
Merge pull request #320 from lourooo/lourooo-fix-318-back-button
DarrellRoberts Apr 15, 2026
cccd845
Merge pull request #309 from lourooo/lourooo-fix-Opportunity-card
DarrellRoberts Apr 15, 2026
70ffb87
Merge pull request #292 from Masahiro-jobson/feature/#132/landing-pag…
need4deed Apr 16, 2026
a0fb076
Merge pull request #319 from Cy-fox/fix/default-language-english-303
need4deed Apr 16, 2026
ed62009
hotfix: fix TypeScript errors introduced by SDK .73 bump
Cy-fox Apr 16, 2026
08b4a5b
fix: rename /dashboard/home to /dashboard (#304 task 3)
Cy-fox Apr 16, 2026
dd9dfa3
Merge pull request #308 from need4deed-org/ivannissimrch/fix/296/add-…
need4deed Apr 16, 2026
57c32f8
fix: save button and checkbox uncheck in opportunity details (#289)
ivannissimrch Apr 12, 2026
08a537b
Merge pull request #302 from need4deed-org/ivannissimrch/fix/289/oppo…
need4deed Apr 16, 2026
9104e27
fix: add missing page.module.css for tmp-home page (broken by #292)
need4deed Apr 16, 2026
98a1a9e
fix: prevent redirect to login on public pages
ivannissimrch Apr 17, 2026
a0d7a65
Merge branch 'develop' into fix/url-dashboard-home-304-task3
Cy-fox Apr 17, 2026
2c4bfcc
adds islogin cookie state & replaces public page prop
DarrellRoberts Apr 17, 2026
fcaaa0e
removes unneeded useeffect
DarrellRoberts Apr 17, 2026
d7db2a1
replaces server fetch w/ useQuery fetch (client)
DarrellRoberts Apr 17, 2026
801a1d3
updates sdk to 0.0.75
DarrellRoberts Apr 17, 2026
d423398
Merge pull request #334 from need4deed-org/ivannissimrch/fix/328/volu…
DarrellRoberts Apr 17, 2026
a4e24ec
adds twodays constant
DarrellRoberts Apr 17, 2026
8fd9793
Merge pull request #337 from need4deed-org/fix-infinite-testimonial-r…
DarrellRoberts Apr 17, 2026
42d12fa
fix: prevent left nav bar from overlapping dashboard content
Cy-fox Apr 15, 2026
7769747
fix: add 16px breathing room to dashboard left margin
Cy-fox Apr 16, 2026
c930313
hotfix: fix TypeScript errors introduced by SDK .73 bump
Cy-fox Apr 16, 2026
a5157db
Merge branch 'develop' into hotfix/ts-errors-from-sdk-bump
arturasmckwcz Apr 19, 2026
4dfcc3a
Fix: dashboard button+direct buttons to forms+ testimonials #321
lourooo Apr 15, 2026
80b8c2f
Fix: direct buttons to forms
lourooo Apr 17, 2026
8acc747
Fix: dashboard button+direct buttons to forms+ testimonials #321
lourooo Apr 15, 2026
bd3bf30
Merge pull request #326 from Cy-fox/fix/left-menu-blocking-dashboard-324
need4deed Apr 20, 2026
23ca3f3
Merge pull request #325 from lourooo/lourooo-fix-321-header-buttons
need4deed Apr 20, 2026
ebb5d98
fix: wrong import url
arturasmckwcz Apr 21, 2026
3e4d509
fix: data struct discrepancy
arturasmckwcz Apr 21, 2026
5271b22
Merge pull request #358 from need4deed-org/hotfix--ts-issues-and-wron…
arturasmckwcz Apr 21, 2026
1d3685e
ci: add lint and typecheck workflow on PRs to develop
nadavosa Apr 21, 2026
3be43d3
Merge pull request #359 from need4deed-org/nadavosa-add-lint-github-a…
arturasmckwcz Apr 21, 2026
bd56fea
Merge pull request #329 from Cy-fox/hotfix/ts-errors-from-sdk-bump
need4deed Apr 21, 2026
939cda6
fix: resolve conflict in dashboard/page.tsx — keep DashboardHome
nadavosa Apr 21, 2026
76f154e
fix: revert representatives to representative — field does not exist …
nadavosa Apr 21, 2026
e7ab8f4
Merge pull request #331 from Cy-fox/fix/url-dashboard-home-304-task3
need4deed Apr 21, 2026
e6807bf
removes page layout from /forms/volunteer
DarrellRoberts Apr 21, 2026
2a50a51
fix: use hook instead await for stable lang
arturasmckwcz Apr 21, 2026
dd4c348
Merge pull request #364 from need4deed-org/hotfix--testimonials-infin…
arturasmckwcz Apr 21, 2026
3b3fe25
Merge pull request #363 from need4deed-org/bug-fix-remove-menu-from-r…
need4deed Apr 21, 2026
5c0d61e
fix: switch to hardcoded
arturasmckwcz Apr 21, 2026
d706591
Merge pull request #372 from need4deed-org/hotfix--switch-to-hardcoded
arturasmckwcz Apr 21, 2026
6de63c9
fix: show language-to-translate as main communication on accompanying…
Cy-fox Apr 22, 2026
f594673
chore: upgrade need4deed-sdk to 0.0.77
Cy-fox Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Lint & Typecheck

on:
pull_request:
branches:
- develop

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'yarn'

- name: restore yarn cache
id: yarn-cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-

- name: install dependencies
if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile

- run: yarn lint
- run: yarn typecheck
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@ next-env.d.ts
# dev
dev/
dev.*
.env.local
15 changes: 13 additions & 2 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,22 @@ import type { NextConfig } from "next";
const apiURL = process.env.API_URL || "http://localhost:5000";
const CLOUDFRONT_HOSTNAME = "d2nwrdddg8skub.cloudfront.net";


const nextConfig: NextConfig = {
typescript: { ignoreBuildErrors: true },
eslint: { ignoreDuringBuilds: true },
compiler: {
styledComponents: true,
},
},
async redirects() {
const eventPageDestination =
"https://docs.google.com/forms/d/e/1FAIpQLSft1xi4NrQB_O6-OyOvVm_HcDSzQtog_3MMj2XAIVNaLKEJxA/viewform?usp=dialog";
return [
{ source: "/event-page", destination: eventPageDestination, permanent: false },
{ source: "/event-page/", destination: eventPageDestination, permanent: false },
{ source: "/:lang/event-page", destination: eventPageDestination, permanent: false },
{ source: "/:lang/event-page/", destination: eventPageDestination, permanent: false },
];
},
async rewrites() {
return [{ source: `/${apiPrefix}/:path*`, destination: `${apiURL}/:path*` }];
},
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"date-fns": "^4.1.0",
"email-validator": "^2.0.4",
"i18next": "^25.3.2",
"need4deed-sdk": "^0.0.73",
"need4deed-sdk": "^0.0.77",
"next": "15.3.8",
"react": "^19.0.0",
"react-day-picker": "^9.13.0",
Expand Down
Binary file added public/favicon.ico
Binary file not shown.
5 changes: 4 additions & 1 deletion public/locales/de/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,8 @@
"header": {
"button": {
"login": "Anmelden",
"joinVolunteer": "Jetzt sich engagieren"
"joinVolunteer": "Jetzt sich engagieren",
"dashboard": "Dashboard"
}
},
"login": {
Expand Down Expand Up @@ -1064,6 +1065,8 @@
"mainCommunication": "Hauptkommunikation",
"residentsSpeak": "Bewohner sprechen",
"schedule": "Zeitplan",
"eventDate": "Veranstaltungsdatum",
"eventTime": "Veranstaltungszeit",
"numberOfVolunteers": "Anzahl der Freiwilligen",
"activities": "Aktivitäten",
"skills": "Fähigkeiten & Erfahrung",
Expand Down
5 changes: 4 additions & 1 deletion public/locales/en/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,8 @@
"header": {
"button": {
"login": "Log in",
"joinVolunteer": "Join as a volunteer"
"joinVolunteer": "Join as a volunteer",
"dashboard": "Dashboard"
}
},
"login": {
Expand Down Expand Up @@ -1063,6 +1064,8 @@
"mainCommunication": "Main communication",
"residentsSpeak": "Residents speak",
"schedule": "Schedule",
"eventDate": "Event date",
"eventTime": "Event time",
"numberOfVolunteers": "Number of volunteers",
"activities": "Activities",
"skills": "Skills & experience",
Expand Down
5 changes: 0 additions & 5 deletions src/app/[lang]/dashboard/home/page.tsx

This file was deleted.

6 changes: 3 additions & 3 deletions src/app/[lang]/dashboard/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Landing } from "@/components/Dashboard/Landing";
import { DashboardHome } from "@/components/Dashboard";

export default function DashboardLandingPage() {
return <Landing />;
export default function DashboardPage() {
return <DashboardHome />;
}
8 changes: 1 addition & 7 deletions src/app/[lang]/forms/volunteer/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
"use client";
import BecomeVolunteer from "@/components/forms/BecomeVolunteer/BecomeVolunteer";
import { PageLayout } from "@/components/Layout";

export default function VolunteerPage() {
return (
<PageLayout background="var(--color-white)">
<BecomeVolunteer />;
</PageLayout>
);
return <BecomeVolunteer />;
}
37 changes: 5 additions & 32 deletions src/app/[lang]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,36 +1,9 @@
import { TestimonialsSection } from "@/components/Testimonials";
import { Landing } from "@/components/Website/Landing";
import { Lang } from "need4deed-sdk";
import Link from "next/link";
import styles from "./page.module.css";
import { use } from "react";

export default async function Home({ params }: { params: Promise<{ lang: Lang }> }) {
const lang = (await params).lang;
export default function Home({ params }: { params: Promise<{ lang: Lang }> }) {
const { lang } = use(params);

if (![Lang.EN, Lang.DE].includes(lang)) {
return null;
}

return (
<div className={styles.page}>
<header>HEADER</header>
<main className={styles.main}>
<div className={styles.ctas}>
<Link href="/login" className={styles.secondary}>
Login
</Link>
<Link href="/persons" className={styles.secondary}>
Persons
</Link>
<Link href="/forms/volunteer" className={styles.secondary}>
Volunteer form
</Link>
<Link href="/forms/opportunity" className={styles.secondary}>
Opportunity form
</Link>
</div>
</main>
<TestimonialsSection lang={lang as Lang} />
<footer className={styles.footer}>FOOTER</footer>
</div>
);
return <Landing lang={lang as Lang} />;
}
168 changes: 168 additions & 0 deletions src/app/[lang]/tmp-home/page.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
.page {
--gray-rgb: 0, 0, 0;
--gray-alpha-200: rgba(var(--gray-rgb), 0.08);
--gray-alpha-100: rgba(var(--gray-rgb), 0.05);

--button-primary-hover: #383838;
--button-secondary-hover: #f2f2f2;

display: grid;
grid-template-rows: 20px 1fr 20px;
align-items: center;
justify-items: center;
min-height: 100svh;
padding: 80px;
gap: 64px;
font-family: var(--font-geist-sans);
}

@media (prefers-color-scheme: dark) {
.page {
--gray-rgb: 255, 255, 255;
--gray-alpha-200: rgba(var(--gray-rgb), 0.145);
--gray-alpha-100: rgba(var(--gray-rgb), 0.06);

--button-primary-hover: #ccc;
--button-secondary-hover: #1a1a1a;
}
}

.main {
display: flex;
flex-direction: column;
gap: 32px;
grid-row-start: 2;
}

.main ol {
font-family: var(--font-geist-mono);
padding-left: 0;
margin: 0;
font-size: 14px;
line-height: 24px;
letter-spacing: -0.01em;
list-style-position: inside;
}

.main li:not(:last-of-type) {
margin-bottom: 8px;
}

.main code {
font-family: inherit;
background: var(--gray-alpha-100);
padding: 2px 4px;
border-radius: 4px;
font-weight: 600;
}

.ctas {
display: flex;
gap: 16px;
}

.ctas a {
appearance: none;
border-radius: 128px;
height: 48px;
padding: 0 20px;
border: none;
border: 1px solid transparent;
transition:
background 0.2s,
color 0.2s,
border-color 0.2s;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
line-height: 20px;
font-weight: 500;
}

a.primary {
background: var(--foreground);
color: var(--background);
gap: 8px;
}

a.secondary {
border-color: var(--gray-alpha-200);
min-width: 158px;
}

.footer {
grid-row-start: 3;
display: flex;
gap: 24px;
}

.footer a {
display: flex;
align-items: center;
gap: 8px;
}

.footer img {
flex-shrink: 0;
}

/* Enable hover only on non-touch devices */
@media (hover: hover) and (pointer: fine) {
a.primary:hover {
background: var(--button-primary-hover);
border-color: transparent;
}

a.secondary:hover {
background: var(--button-secondary-hover);
border-color: transparent;
}

.footer a:hover {
text-decoration: underline;
text-underline-offset: 4px;
}
}

@media (max-width: 600px) {
.page {
padding: 32px;
padding-bottom: 80px;
}

.main {
align-items: center;
}

.main ol {
text-align: center;
}

.ctas {
flex-direction: column;
}

.ctas a {
font-size: 14px;
height: 40px;
padding: 0 16px;
}

a.secondary {
min-width: auto;
}

.footer {
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
}

@media (prefers-color-scheme: dark) {
.logo {
filter: invert();
}
}
27 changes: 27 additions & 0 deletions src/app/[lang]/tmp-home/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Link from "next/link";
import styles from "./page.module.css";

export default async function Home() {
return (
<div className={styles.page}>
<header>HEADER</header>
<main className={styles.main}>
<div className={styles.ctas}>
<Link href="/login" className={styles.secondary}>
Login
</Link>
<Link href="/persons" className={styles.secondary}>
Persons
</Link>
<Link href="/forms/volunteer" className={styles.secondary}>
Volunteer form
</Link>
<Link href="/forms/opportunity" className={styles.secondary}>
Opportunity form
</Link>
</div>
</main>
<footer className={styles.footer}>FOOTER</footer>
</div>
);
}
2 changes: 1 addition & 1 deletion src/components/Dashboard/Agents/AgentCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export const AgentCard = ({ agent }: Props) => {
</CardDetailsInfo>
<CardDetailsInfo>
<Heading4>{t("dashboard.agentProfile.volunteerSearch")}</Heading4>
<StatusBadge status={agent?.volunteerSearch} label={volunteerSearchLabels[volunteerSearch]} />
<StatusBadge status={volunteerSearch} label={volunteerSearchLabels[volunteerSearch]} />
</CardDetailsInfo>
<CardDetailsInfo onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()} role="presentation">
<Heading4>{t("dashboard.agentProfile.trustLevel")}</Heading4>
Expand Down
2 changes: 1 addition & 1 deletion src/components/Dashboard/Agents/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export function getNormalizedAgent(agent: AgentListItem): Omit<
...agent,
type: agent.type,
district: agent.district,
volunteerSearch: agent.volunteerSearch,
volunteerSearch: agent.volunteerSearch ?? AgentVolunteerSearchType.NOT_NEEDED,
trustLevel: agent.trustLevel ? agent.trustLevel : AgentTrustType.UNKNOWN,
serviceType: agent.serviceType,
};
Expand Down
Loading
Loading