Skip to content
Oncology Rehabilitation
Website

Oncology Rehabilitation

The recruitment site for an EU-funded rehabilitation programme at a regional oncology hospital.

Delivered — July 2021 to December 2022 ·

  • React
  • PHP
  • Material Design
  • reCAPTCHA
  • Apache 2.0
Short description

An application form and information site for an ESF-co-financed project.

Screenshots

Drag the strip sideways to browse. Click a screenshot to enlarge it, then use the arrow keys.

Full description

The website for "Oncology rehabilitation for cancer patients, 2021–2022, at the West Pomeranian Oncology Centre" — commissioned by the hospital (ZCO) in Szczecin and co-financed by the European Social Fund under the West Pomeranian Regional Operational Programme 2014-2020.

THE COMMISSION

The brief came from the hospital's administrative department as a written scope of work: an online-recruitment site, an application form, downloadable documents, a link back from the hospital's own homepage, its own hosting and domain, and staff training on running the site.

A FORM THAT ANSWERS TO EU FUNDING RULES, NOT JUST UX

Recruiting into an ESF-funded programme means collecting specific monitoring indicators — including sensitive data about disability or social disadvantage — always with a "declined to answer" option. The form validates the national ID number, required fields and date format before anything moves further.

ANTI-SPAM AND VALIDATION

reCAPTCHA on the form, client- and server-side field validation, and PHP scripts responsible for safely getting a submission to the project coordinator.

THE VISUAL LAYER

A React frontend built on Google's Material Design components — a consistent, accessible interface without a bespoke design system built from scratch, fully responsive on phones and tablets.

A PROJECT WITH AN END DATE

The engagement had a fixed timeline (07.2021–12.2022) and a budget split across two fiscal years — a site built for a specific, time-boxed public programme, not a product maintained indefinitely.


Technology

Scope of work: Design, frontend and form-script implementation, hosting, staff training

Frontend application
  • React
  • Google Material Design components
  • Responsive CSS
Backend
  • PHP (form-handling scripts)
  • Server-side validation
  • Email/server delivery
Testing
  • reCAPTCHA
  • Client + server field validation
  • PESEL format validation
Delivery
  • Own hosting & domain
  • Apache License 2.0
  • Admin training
  • Cookie policy

Case study — architecture and technology

8 min

The project in one paragraph

This is the website for a real EU-funded programme — recruiting oncology patients into a free rehabilitation programme run by the West Pomeranian Oncology Centre (ZCO) in Szczecin, co-financed by the European Social Fund. The commission came from the hospital as a written brief with a fixed, closed scope — not from a startup with an open backlog. The hardest constraints on this project weren't technical; they were procedural: EU programme requirements, mandatory funding logos, participant paperwork, and a fixed schedule.

A brief instead of a product owner

The order arrived by email from ZCO's administrative department with an attached scope of work: an online-recruitment site, an application form with a sample questionnaire, documents for candidates and participants supplied by the client, a link back from the hospital's homepage, its own design and layout, form-handling scripts with validation, a Cookie Policy, the funding logos mandated by the agreement with the regional labour office, hosting and a domain provided by the contractor, training for at least two staff members who'd administer the site, and technical support for the whole life of the project. Zero freedom over scope — all the freedom was in how to build it.

A form that has to satisfy a funding programme, not just a UX brief

Recruiting into an ESF-funded programme isn't an ordinary contact form. The programme requires collecting specific Common Indicators monitoring data — among other things, whether the participant belongs to a national or ethnic minority, is homeless or affected by housing exclusion, has a disability, or is in another kind of social disadvantage. Some of these questions concern GDPR special-category data, so each one carries a third option next to "yes"/"no": "declined to answer" — a participant is never forced to respond, and no answer is a valid form state, not a validation error.

The rest of the form validates what a typical public-sector site is formally required to check: the national ID number (PESEL) in its strict eleven-digit format, required fields marked with an asterisk, the date format for the project start date, age at enrollment, education level from a closed list, and the participant's professional category (social-welfare institution employee, labour-market institution employee, higher-education institution employee, psychological-pedagogical counselling centre employee, farmer, and others) with an "Other" field for anything not on the list.

PHP scripts as the quiet but critical piece

The visual layer is React on Google's Material Design components — but what actually decides whether a submission reaches the project coordinator is the server-side PHP: re-validating every field (never trust browser-side validation alone), assembling the submission into an email or a server-side record, and reCAPTCHA as the first line of defence against bots filling out the recruitment form of a public, easily-indexed health programme — a real risk, not a theoretical one.

Logos aren't decoration, they're a contract requirement

An EU-funded project's website has to carry specific mandated logos — the European Funds emblem, the Polish national emblem, the regional brand, the European Union/ESF emblem — laid out and proportioned exactly as the regional labour office's guidelines specify, passed down through the client. This isn't a design choice; it's a condition of the grant itself: incorrect promotional marking can get an expense disqualified by the funding institution.

A task billed across two fiscal years

The engagement had a fixed shape from the start: beginning in July 2021, ending December 31, 2022, with spending split evenly between two budget years — the typical rhythm of a publicly-funded project, where the payment schedule follows the funding institution's calendar year rather than implementation milestones. Technical support was part of the contract for that entire period, not a one-off delivery.

Handing over knowledge, not just code

Part of the commission was training at least two hospital staff members in running, administering and editing the built site — because once the engagement ended, it was ZCO's own staff, not the contractor, who'd update content and handle submissions day to day. The site had to be simple enough to hand over in a single on-site training session at the client's own office.

A project with an end date, not a product without one

The support programme ended on December 31, 2022, along with the EU-funded project that paid for the rehabilitation it recruited for — the project's domain is no longer active. That's an honest picture of a fair share of freelance work: not every engagement is a product maintained indefinitely; some are sites built for a specific, time-boxed public purpose, and they end their life alongside the funding that created them.

What this project actually taught me

The strongest lesson here: compliance with an EU funding programme is its own hard specification, sitting right alongside UX and technology — the form had to be simultaneously friendly to fill out and precise about collecting exactly the data, in exactly the shape (declined-to-answer option included), that the European Social Fund's grant reporting requires. The thing I'd repeat: read the client's brief as carefully as any technical spec, because on a public-sector project, the brief — not personal taste — decides most of the product choices.


Let's talk about the planned project

The first consultation is free and without obligation. A short description of the process and the expected outcome is enough.

Let's talk about the project