Skip to content

Latest commit

 

History

642 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SoftServe Academy

Liatoshynsky Foundation

Liatoshynsky Foundation

«Liatoshynsky Foundation» присвячений популяризації творчості Бориса Лятошинського – видатного українського композитора, представника модернізму та експресіонізму.

Github Issues Pending Pull-Requests License


Table of Contents


Installation


Turnstile Captcha

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 TurnstileWidget in the codebase for implementation details.

WayforPay Integration

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.tsx for integration details.

  • All the code required to get started

  • Images of what it should look like

Required to install

  • NodeJS (22.0.0)

Environment

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

  • Clone this repo to your local machine using git@github.com:Liatoshynsky-Foundation/lf-client.git

Setup

  • If you want more syntax highlighting, format your code like this:

update and install this package first

$ brew update
$ brew install SOMEREPOproductions

now 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.

How to run local

npm run dev

How to run Docker


Usage

API Documentation

Documentation is rendered with Redoc at /api-docs.

File Structure

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

Adding New API Documentation

  1. Create openapi.json in your endpoint folder:
   app/api/[your-endpoint]/openapi.json
  1. 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
      }
    }
  });
}
  1. Verify at /api-docs

How to run tests

  • To run all unit tests open terminal and run npm run test in it.
  • To run single unit test file run npm run test -- {component}.test.tsx.

How to Checkstyle


Documentation

Folder structure

├── 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 middleware

Contributing

Git flow

gitGraph
   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"

Loading

To get started...

Step 1

  • Option 1 g - 🍴 Fork this repo!

  • Option 2

    • 👯 Clone this repo to your local machine using https://github.com/ita-social-projects/SOMEREPO.git

Step 2

  • HACK AWAY! 🔨🔨🔨

Step 3

Issue flow


Team

Mentors

@kolyasalubov @vlad-khrychov

Experts

@bandvov @myevd

Development team

Team Lv-680.5

@Mav-Ivan

Team Lv-680.10

@Mike-Popovych

Team Lv-680.11

@Renatavl

Team Lv-680.12

@markgol777 @VKormylo @nebby2105 @SofiiaYevush @ArtemHolikov @sandrvvu

Team Lv-680.13

@yur4uwe @uliaescha @Iarynovskyi @danikua @lizabre @oleg191006 @TARDeus524 @IrynaKhylchuk @luvthenika @irynalaitaruk

Team UA-5044

@ssashayurchenko @bohuslavstan @Kryzhanivsky

Team UA-5195

@qqwz0 @NatalyKrvch @stsvt @Taras-ep @ruslansymonenko @alisa-korniienko @LischenkoYaroslav @MaksFullJs @Xlopuk @kolibri753 @DenisGordProgrammer @krxllll

Team UA-5353

@dest411 @kandyba @Jevgan @navimov @Fedorieieva @Th0mas-H0ward

Team UA-5354

@annak413 @LightOrden @varenichek22 @dmitryzh100 @telare @yuliiayarova @vladashvch @pALINchuk @Halyna-Trush @Yushchyk-Roman @Fronik123 @premiumderyn @dianajnxv

DevOps team

@qwqw-333 @denchik911

Designer team

@Nastia197 @a-humanenko @Valigura @JuliaKharaim


License

License

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages