Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
c17828a
Merge pull request #283 from need4deed-org/develop
arturasmckwcz Mar 31, 2026
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
ae2e7a4
Merge pull request #306 from need4deed-org/develop
arturasmckwcz 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
f96d596
Merge pull request #310 from need4deed-org/develop
need4deed Apr 14, 2026
d480842
Merge pull request #314 from need4deed-org/develop
arturasmckwcz Apr 15, 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
8d42326
Merge pull request #335 from need4deed-org/develop
arturasmckwcz 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
85f2d2e
Merge pull request #338 from need4deed-org/develop
arturasmckwcz 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
dc4a24b
Fix: No ZIP/PLZ-code for Accompanying details #344
lourooo Apr 20, 2026
7bc5d9f
fix: send ISO code instead of translated title for language submission
nadavosa Apr 20, 2026
26dbee4
fix: show translated language name for selected option, remove dead d…
nadavosa Apr 20, 2026
2c7a7e0
Merge pull request #350 from need4deed-org/fix/language-iso-code-subm…
need4deed Apr 20, 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
6074662
Fix: helpers.ts
lourooo 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
9c86816
Merge pull request #365 from need4deed-org/develop
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
53bccff
Merge pull request #373 from need4deed-org/develop
arturasmckwcz Apr 21, 2026
a2b379d
🐛 preserve language purpose when saving volunteer profile
Cy-fox Apr 22, 2026
fa1fa97
fix: stop sending district/language titles to API when ID lookup fails
Cy-fox Apr 22, 2026
3d22f2f
fix: use accompanyingDetails.date on opportunity cards when type is a…
Cy-fox Apr 22, 2026
9adae0b
chore: upgrade need4deed-sdk to 0.0.76 and remove local type workaround
Cy-fox Apr 22, 2026
6f3821f
chore: upgrade need4deed-sdk to 0.0.77
Cy-fox Apr 22, 2026
0ee7696
feat: add update opportunity type options and translations
muslimalfatih Apr 22, 2026
c881c93
Merge branch 'develop' into muslim-fix-opportunity-type-buttons
arturasmckwcz Apr 22, 2026
d4cb27c
Merge pull request #380 from muslimalfatih/muslim-fix-opportunity-typ…
arturasmckwcz Apr 22, 2026
d510584
Merge pull request #381 from Cy-fox/fix/accompanying-date-on-cards-398
arturasmckwcz Apr 23, 2026
40d4485
Merge pull request #382 from need4deed-org/develop
arturasmckwcz Apr 23, 2026
7dc77e9
fix: fetch and display connected opportunities on agent profile
Cy-fox Apr 22, 2026
fb3accc
adds helper func to get activity titles from ids
DarrellRoberts Apr 23, 2026
1b70737
removes console log
DarrellRoberts Apr 23, 2026
e2454eb
adds activity filter to opp-list
DarrellRoberts Apr 23, 2026
d80441a
adds String to ids & removes undefined from deserialFunc
DarrellRoberts Apr 23, 2026
454be23
fix: add fallback for missing statusOpportunity in subtitle
Cy-fox Apr 24, 2026
3fa7ccb
Merge pull request #384 from need4deed-org/add-opp-list-activities-fu…
nadavosa Apr 24, 2026
bd0088d
fix: preserve local time for accomp_datetime instead of converting to…
nadavosa Apr 24, 2026
4eb1f2b
Merge branch 'develop' into fix/accomp-datetime-utc-offset
arturasmckwcz Apr 24, 2026
2ff7b3d
Merge pull request #395 from need4deed-org/fix/accomp-datetime-utc-of…
arturasmckwcz Apr 24, 2026
2efa2a6
Merge branch 'develop' into lourooo-fix-344-postcode-accompanying-det…
need4deed Apr 24, 2026
bda39e1
Merge pull request #348 from lourooo/lourooo-fix-344-postcode-accompa…
need4deed Apr 24, 2026
38482ce
Merge pull request #376 from Cy-fox/fix/languages-edit-form-367
need4deed Apr 24, 2026
4f921b6
Merge branch 'develop' into fix/agent-opportunities-list-353
need4deed Apr 24, 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.
9 changes: 8 additions & 1 deletion public/locales/de/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,8 @@
"header": "Art des Bedarfs",
"volunteering": "Freizeit",
"accompanying": "Begleitung",
"regular": "Regelmäßig",
"events": "Veranstaltung",
"helpText": "Es gibt zwei Arten von Unterstützung: Freiwilliges Engagement bei verschiedenen Aktivitäten (meist Freizeitaktivitäten) und Begleitung zu Terminen.",
"helpTitle": ""
},
Expand Down Expand Up @@ -346,6 +348,7 @@
"accompanyingDesc": "Nur Freiwillige anzeigen, die bereit sind, Bewohner zu einzelnen Terminen zu begleiten",
"district": "Bezirk",
"languages": "Sprachen",
"activities": "Aktivitäten",
"engagement": {
"header": "Engagement",
"active": "Aktiv",
Expand Down Expand Up @@ -423,7 +426,8 @@
"header": {
"button": {
"login": "Anmelden",
"joinVolunteer": "Jetzt sich engagieren"
"joinVolunteer": "Jetzt sich engagieren",
"dashboard": "Dashboard"
}
},
"login": {
Expand Down Expand Up @@ -1021,6 +1025,7 @@
"accompanyingDetailsTitle": "Begleitdetails",
"accompanyingDetails": {
"appointmentAddress": "Terminadresse",
"appointmentPostcode": "Terminpostleitzahl",
"appointmentDate": "Termindatum",
"appointmentTime": "Terminzeit",
"refugeeNumber": "Geflüchtetennummer",
Expand Down Expand Up @@ -1064,6 +1069,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
9 changes: 8 additions & 1 deletion public/locales/en/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,8 @@
"header": "Type Of Opportunity",
"volunteering": "Volunteering Opportunity",
"accompanying": "Accompanying Appointment",
"regular": "Regular",
"events": "Events",
"helpText": "There are two ways of helping: Volunteering doing various activities and Accompanying to appointments essentially providing translation",
"helpTitle": ""
},
Expand Down Expand Up @@ -346,6 +348,7 @@
"accompanyingDesc": "Only show volunteers that are open to bring residents to individual appointments",
"district": "District",
"languages": "Languages",
"activities": "Activities",
"engagement": {
"header": "Engagement",
"active": "Active",
Expand Down Expand Up @@ -423,7 +426,8 @@
"header": {
"button": {
"login": "Log in",
"joinVolunteer": "Join as a volunteer"
"joinVolunteer": "Join as a volunteer",
"dashboard": "Dashboard"
}
},
"login": {
Expand Down Expand Up @@ -1020,6 +1024,7 @@
"accompanyingDetailsTitle": "Accompanying details",
"accompanyingDetails": {
"appointmentAddress": "Appointment address",
"appointmentPostcode": "Appointment postcode",
"appointmentDate": "Appointment date",
"appointmentTime": "Appointment time",
"refugeeNumber": "Refugee number",
Expand Down Expand Up @@ -1063,6 +1068,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();
}
}
Loading
Loading