This repo contains the front-end part of the Victory Center project.
Main structure of this project:
victory-center-client
├───.github
│ ├───ISSUE_TEMPLATE
│ ├───PULL_REQUEST_TEMPLATE
│ ├───workflows
│ └───CODEOWNERS
├───nginx
├───public
├───scripts
├───src
│ ├───__mocks__
│ ├───assets
│ │ ├───fonts
│ │ ├───icons
│ │ ├───images
│ │ │ ├───admin
│ │ │ │ └───home
│ │ │ ├───common
│ │ │ └───public
│ │ │ ├───about-us-page
│ │ │ ├───partners-page
│ │ │ ├───programs-page
│ │ │ └───team-page
│ │ ├───sass
│ │ │ ├───mixins
│ │ │ └───variables
│ │ └───videos
│ │ ├───admin
│ │ ├───common
│ │ └───public
│ │ ├───partners-page
│ │ ├───programs-page
│ │ └───team-page
│ ├───components
│ │ ├───admin
│ │ │ ├───admin-context-wrapper
│ │ │ ├───admin-navigation
│ │ │ ├───admin-panel-toolbar
│ │ │ ├───button
│ │ │ ├───button-tooltip
│ │ │ ├───category-bar
│ │ │ ├───confirmation-modal
│ │ │ ├───context-menu-button
│ │ │ ├───draggable-list-item
│ │ │ ├───drag-preview
│ │ │ ├───generic-modal-wrapper
│ │ │ ├───hint-box
│ │ │ ├───image-input
│ │ │ ├───infinite-scroll-list
│ │ │ ├───input-error
│ │ │ ├───input-groups
│ │ │ │ ├───input-with-character-limit-group
│ │ │ │ ├───multi-select-input-group
│ │ │ │ ├───photo-input-group
│ │ │ │ ├───single-select-input-group
│ │ │ │ └───text-area-with-character-limit-group
│ │ │ ├───input-label
│ │ │ ├───input-with-character-limit
│ │ │ ├───multi-select-input
│ │ │ ├───private-route
│ │ │ ├───public-route
│ │ │ ├───search-bar
│ │ │ │ ├───search-item-wrapper
│ │ │ │ └───text-search-item
│ │ │ ├───status-filter-dropdown
│ │ │ ├───textarea-with-character-limit
│ │ │ ├───toast
│ │ │ │ ├───toast-container
│ │ │ │ └───toast-item
│ │ │ ├───tooltip
│ │ │ └───visibility-status-label
│ │ ├───common
│ │ │ ├───inline-loader
│ │ │ ├───modal
│ │ │ ├───page-loader
│ │ │ ├───partners
│ │ │ ├───select
│ │ │ ├───single-select-input
│ │ │ └───tabs
│ │ └───public
│ │ ├───dropdown-menu
│ │ ├───faq-section
│ │ │ └───faq-card
│ │ ├───footer
│ │ ├───header
│ │ └───language-switcher
│ ├───const
│ │ ├───admin
│ │ ├───common
│ │ │ └───api-routes
│ │ ├───public
│ │ └───routers
│ ├───contexts
│ │ ├───admin
│ │ │ ├───admin-context-provider
│ │ │ ├───toast-context-provider
│ │ │ └───visitor-pages-provider
│ │ └───public
│ ├───hooks
│ │ ├───admin
│ │ │ ├───fetch
│ │ │ │ └───use-data-pagination-fetch
│ │ │ ├───use-admin-client
│ │ │ ├───use-categories-counter
│ │ │ ├───use-form-manager
│ │ │ ├───use-generic-modal
│ │ │ └───use-modals-state
│ │ └───common
│ │ ├───use-container-size-from-children
│ │ ├───use-data-fetch
│ │ ├───use-debounced-value-callback
│ │ ├───use-observe-element-size
│ │ ├───use-on-click-outside
│ │ ├───use-on-mount-unsafe
│ │ └───use-scroll-handler
│ ├───jest
│ ├───layouts
│ │ ├───admin-layout
│ │ └───public-layout
│ ├───locales
│ │ ├───en
│ │ └───uk
│ ├───pages
│ │ ├───admin
│ │ │ ├───faq
│ │ │ │ └───components
│ │ │ │ ├───faq-component
│ │ │ │ ├───faq-form
│ │ │ │ ├───faq-modals
│ │ │ │ │ ├───delete-faq-modal
│ │ │ │ │ └───faq-modal
│ │ │ │ ├───faq-panel-content
│ │ │ │ └───faq-search-item
│ │ │ ├───home
│ │ │ ├───login
│ │ │ │ └───login-form
│ │ │ ├───programs
│ │ │ │ └───components
│ │ │ │ ├───program-category-modals
│ │ │ │ ├───program-form
│ │ │ │ ├───program-list-item
│ │ │ │ ├───program-search-item
│ │ │ │ ├───programs-page-content
│ │ │ │ ├───programs-page-modals
│ │ │ │ │ ├───delete-program-modal
│ │ │ │ │ └───program-modal
│ │ │ │ └───programs-page-toolbar
│ │ │ └───team
│ │ │ └───components
│ │ │ ├───delete-team-category-modal
│ │ │ ├───delete-team-member-modal
│ │ │ ├───member-component
│ │ │ ├───member-form
│ │ │ ├───team-category-modal
│ │ │ ├───team-member-modal
│ │ │ ├───team-page-content
│ │ │ ├───team-page-modals
│ │ │ └───team-page-toolbar
│ │ └───public
│ │ ├───about-us-page
│ │ │ ├───company-values
│ │ │ ├───donate-section
│ │ │ ├───intro-section
│ │ │ ├───main-value
│ │ │ ├───our-mission
│ │ │ │ └───scrollable-frame
│ │ │ ├───our-team-section
│ │ │ └───support-section
│ │ ├───donate-page
│ │ │ ├───copy-text-button
│ │ │ ├───donate-page-intro
│ │ │ ├───donate-section
│ │ │ └───right-section
│ │ │ ├───abroad-payment-details
│ │ │ ├───alternative-support-ways
│ │ │ └───ukraine-payment-details
│ │ ├───not-found-page
│ │ │ ├───not-found-intro
│ │ │ └───not-found-message
│ │ ├───partners-page
│ │ │ └───partners-sections
│ │ │ ├───intro-section
│ │ │ └───outro-section
│ │ ├───programs-page
│ │ │ ├───contact-section
│ │ │ ├───intro-section
│ │ │ └───programs-section
│ │ │ └───program-card
│ │ └───team-page
│ │ └───team-member-card
│ ├───routes
│ │ └───app-router
│ ├───services
│ │ ├───api
│ │ │ ├───admin
│ │ │ │ ├───faq
│ │ │ │ ├───image
│ │ │ │ ├───login
│ │ │ │ ├───programs
│ │ │ │ └───team
│ │ │ │ ├───team-categories
│ │ │ │ └───team-members
│ │ │ └───public
│ │ │ ├───faq
│ │ │ ├───programs
│ │ │ └───team
│ │ └───auth
│ │ ├───auth-service
│ │ ├───create-admin-client
│ │ └───resolve-with-new-token
│ ├───types
│ │ ├───admin
│ │ ├───common
│ │ └───public
│ ├───utils
│ │ ├───functions
│ │ │ ├───get-env-variable
│ │ │ ├───mappers
│ │ │ │ ├───admin
│ │ │ │ ├───common
│ │ │ │ └───public
│ │ │ └───test-helpers
│ │ └───mock-data
│ │ ├───admin
│ │ └───public
│ ├───validation
│ │ ├───admin
│ │ │ ├───faq-schema
│ │ │ ├───program-category-schema
│ │ │ ├───program-schema
│ │ │ ├───team-category-schema
│ │ │ └───team-member-schema
│ │ └───public
│ ├───index.tsx # Entry point (ReactDOM.createRoot)
│ ├───index.css # Global styles (normalizer)
│ ├───react-app-env.d.ts
│ ├───reportWebVitals.ts
│ ├───setupProxy.ts
│ └───setupTests.ts
├───.coderabbit.yaml
├───.dockerignore
├───.env.development
├───.gitignore
├───Dockerfile
├───LICENSE
├───package-lock.json
├───package.json
├───README.md
└───tsconfig.json
- For more on these wonderful badges, refer to shields.io.
Runs the app in the development mode.
Open https://localhost:3000 to view it in the browser.
The page will reload if you make edits.
You will also see any lint errors in the console.
Runs the app in development mode over HTTPS, generating and trusting a local SSL certificate.
Open https://localhost:3000 to view it in the browser without certificate warnings.
The page will reload if you make edits.
You will also see any lint errors in the console.
Launches the test runner in the interactive watch mode.
See the section about running tests for more information.
Launches the test runnner that will collect coverage info
and present it in a form of a table in terminal.
Launches the lint check that will allow to debug lint errors locally.
Lunches code formating process
Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is ready to be deployed!
See the section about deployment for more information.
Note: this is a one-way operation. Once you eject, you can’t go back!
Ensure you have installed the back-end project and the following prerequisites:
- Node.js (24.0.0) or higher
- npm (11.4.2) or higher (installed with Node.js)
Clone this repo to your local machine using:
git clone https://github.com/ita-social-projects/VictoryCenter-Client
To setup this project use this command in project folder:
npm install
To enable HTTPS locally, you have two options:
- Either install OpenSSL, add it to your PATH and use this command to handle configuration for you and start the project:
npm run start-with-cert
- Or if you have any troubles, we have a few manual setup steps. Follow these instructions carefully:
Before proceeding, ensure you have mkcert installed on your system.
- Create a
certsfolder in the root directory of cloned project. - Navigate to the
certsfolder in your console. - Run the following command to install local certificate authority:
mkcert -install
- Run the following command to configure SSL certificates:
mkcert -key-file localhost-key.pem -cert-file localhost-cert.pem localhost 127.0.0.1 ::1
environmental variables (already set in .env.development)
HTTPS=true
SSL_KEY_FILE=certs/localhost-key.pem
SSL_CRT_FILE=certs/localhost-cert.pem
REACT_APP_PROXY_TARGET=https://backend.historycode.online/api
REACT_APP_BACKEND_URL=/api
REACT_APP_SIGNALR_PDF_REPORTS_URL=https://backend.victorycenter.online/hubs/reportsThis project includes configurations for Claude Code and GitHub Copilot to enhance your development experience with AI-powered assistance.
# Add GitHub MCP integration
claude mcp add github --scope user
# Authenticate
# Run /mcp in Claude Code and authenticate with GitHubNo setup needed! Use @github in Copilot Chat for repository operations:
@github list recent pull requests
@github create an issue titled "Bug fix"
-
Agent Skills: Custom skills for Victory Center project
/victory-center-docs- Search project documentation/victory-center-structure- Navigate codebase/victory-center-api- API endpoints help/victory-center-components- Component patterns/victory-center-forms- Forms & validation
-
MCP Integration: Connect to GitHub for repository operations
- Create/manage issues and pull requests
- Search code across repository
- View file contents and commits
- Manage repository settings
- CLAUDE.md - Concise project overview for AI assistants
- AGENTS.md - Detailed coding guidelines for AI agents
- MCP_SETUP.md - Complete MCP setup guide
- .claude/skills/ - Claude Code Agent Skills
- .github/skills/ - GitHub Copilot Agent Skills
- .github/copilot-instructions.md - Always-on Copilot guidance
See MCP_SETUP.md for detailed setup instructions for both Claude Code and GitHub Copilot.
To get started...
-
Option 1
- 🍴 Fork this repo!
-
Option 2
- 👯 Clone this repo to your local machine using
https://github.com/ita-social-projects/VictoryCenter-Client
- 👯 Clone this repo to your local machine using
- HACK AWAY! 🔨🔨🔨
- 🔃 Create a new pull request using github.com/ita-social-projects/VictoryCenter-Client/compare.
Or Contributors/People
Reach out to us at one of the following places!
- Discord at
ira_zavushchak - Telegram at
Iryna Zavushchak
- MIT license
- Copyright 2025 © SoftServe Academy.