«Liatoshynsky Foundation» присвячений популяризації творчості Бориса Лятошинського – видатного українського композитора, представника модернізму та експресіонізму.
This project uses Cloudflare Turnstile for user verification before allowing donations. Turnstile is a privacy-focused captcha solution that helps prevent automated abuse while maintaining a smooth user experience.
- The captcha widget appears when a user initiates a donation.
- The backend verifies the token received from Turnstile before processing payment requests.
- See
TurnstileWidgetin the codebase for implementation details.
Donations are processed using WayforPay, a secure payment gateway widely used in Ukraine.
-
When a donation is initiated and captcha verification succeeds, an invoice is created via the WayforPay API.
-
The payment widget is loaded dynamically and presented to the user for completing the transaction.
-
See the donation flow in
Donate.tsxfor integration details. -
All the
coderequired to get started -
Images of what it should look like
- NodeJS (22.0.0)
environmental variables
spring.datasource.url=${DATASOURCE_URL}
spring.datasource.username=${DATASOURCE_USER}
spring.datasource.password=${DATASOURCE_PASSWORD}
spring.mail.username=${EMAIL_ADDRESS}
spring.mail.password=${EMAIL_PASSWORD}
cloud.name=${CLOUD_NAME}
api.key=${API_KEY}
api.secret=${API_SECRET}- Clone this repo to your local machine using
git@github.com:Liatoshynsky-Foundation/lf-client.git
- If you want more syntax highlighting, format your code like this:
update and install this package first
$ brew update
$ brew install SOMEREPOproductionsnow install npm and bower packages
$ npm install
$ bower install- For all the possible languages that support syntax highlithing on GitHub (which is basically all of them), refer here.
npm run devDocumentation is rendered with Redoc at /api-docs.
app/
├── api/
│ ├── docs/
│ │ └── route.ts # Combines all specs and serves OpenAPI JSON
│ └── [your-endpoint]/
│ ├── openapi.json # Endpoint API specification
│ └── route.ts # Endpoint API handler
└── api-docs/
├── layout.tsx # Isolated layout for docs page
└── page.tsx # Redoc renderer
- Create
openapi.jsonin your endpoint folder:
app/api/[your-endpoint]/openapi.json
- Import and merge in
app/api/docs/route.ts:
import newSpec from '../[your-endpoint]/openapi.json';
export async function GET() {
return Response.json({
// ... info, servers ...
paths: {
...existingSpec.paths,
...newSpec.paths
},
components: {
schemas: {
...existingSpec.components?.schemas,
...newSpec.components?.schemas
}
}
});
}- Verify at
/api-docs
- To run all unit tests open terminal and run
npm run testin it. - To run single unit test file run
npm run test -- {component}.test.tsx.
├── public/ # Static assets (icons, images, mock news images)
│ └── images/ # Categorized image assets (biography, events, partners)
├── app/ # Main application source (Next.js App Router)
│ ├── [lang]/ # Localization-based routing wrapper
│ │ ├── about-us/ # Foundation history and mission pages
│ │ ├── archive/ # Digital archives ([fund] and [case] dynamic routes)
│ │ ├── artistry/ # Creative and artistic activity sections
│ │ ├── biography/ # Liatoshynsky biography with interactive content
│ │ ├── contacts/ # Contact pages with feedback info
│ │ ├── news/ # Media center and foundation news
│ │ ├── research/ # Scientific research and publications section
│ │ └── war-in-ukraine/ # Dedicated section for current events/impact
│ ├── api/ # Server-side API routes (Route Handlers)
│ │ ├── compositions/ # CRUD for musical compositions (data, filters, titles)
│ │ ├── scientific-works/ # Management of scientific publications and filtering
│ │ ├── storage-file/ # Cloudflare R2 media proxy
│ │ ├── create-invoice/ # Payment and donation processing logic
│ │ └── health/ # API health monitoring endpoint
│ ├── di/ # Dependency Injection layer
│ │ └── modules/ # Inversify or custom DI module definitions
│ ├── domain/ # Core business logic and types
│ │ └── dto/ # Data Transfer Objects for API-Client communication
│ ├── infrastructure/ # Data Access Layer
│ │ ├── db/ # Database connection logic
│ │ ├── models/ # Database schemas (Archive, News, ScientificWorks)
│ │ └── repositories/ # Repository pattern for DB abstraction
│ ├── services/ # Application Business Services
│ │ ├── scientific-works/ # Business logic for scientific data
│ │ ├── email/ # Email sending services and templates
│ │ ├── pages-data/ # Dynamic content aggregation for various pages
│ ├── shared/ # Reusable core codebase
│ │ ├── components/ # Global UI Components
│ │ │ ├── design-system/ # Atomic components
│ │ │ ├── blocks/ # Complex UI sections
│ │ │ ├── tables/ # Advanced data tables
│ │ │ ├── forms/ # Specialized forms
│ │ │ ├── Header/ # Site navigation with AudioPlayer integration
│ │ │ ├── Footer/ # Multi-section footer with social media links
│ │ │ └── design-system/ # Atomic design system
│ │ ├── hooks/ # React hooks
│ │ ├── context/ # Global state management
│ │ ├── layouts/ # Shared page layouts
│ │ └── exceptions/ # Custom error handling and domain-specific errors
│ ├── types/ # Global TypeScript definitions, enums, and interfaces
│ ├── validators/ # Data validation schemas
│ └── middleware/ # Next.js middlewaregitGraph
commit id: "Initial commit"
branch develop
checkout develop
commit id: "Setup project structure"
branch feature/login
checkout feature/login
commit id: "Add login UI"
commit id: "Connect login to backend"
checkout develop
merge feature/login id: "Merge login feature"
branch release/1.0
checkout release/1.0
commit id: "Prepare release 1.0"
checkout main
merge release/1.0 id: "Merge release 1.0 into main"
commit id: "Tag version v1.0"
checkout develop
merge release/1.0 id: "Merge release 1.0 back into develop"
checkout main
branch hotfix/1.0.1
checkout hotfix/1.0.1
commit id: "Fix critical bug in production"
checkout main
merge hotfix/1.0.1 id: "Merge hotfix into main"
commit id: "Tag version v1.0.1"
checkout develop
merge hotfix/1.0.1 id: "Merge hotfix into develop"
To get started...
-
Option 1 g - 🍴 Fork this repo!
-
Option 2
- 👯 Clone this repo to your local machine using
https://github.com/ita-social-projects/SOMEREPO.git
- 👯 Clone this repo to your local machine using
- HACK AWAY! 🔨🔨🔨
- 🔃 Create a new pull request using github.com/Liatoshynsky-Foundation/lf-client.
- MIT license
- Copyright 2025 © SoftServe Academy.
