NoQL (No Query Language) is an AI-powered, full-stack data analysis platform that enables users to query databases using natural language and visualize results instantly.
Key Highlights:
- Natural Language Queries: Ask questions in plain English and get answers from your database
- Interactive Visualizations: Generate tables and charts via a dedicated plot service
- Secure LLM Integration: Backend integrates with OpenAI GPT and Anthropic Claude for intelligent query handling
- Modern Full-Stack Architecture:
- Backend: Java + Spring Boot, PostgreSQL
- Frontend: React + TypeScript SPA
- Plot Service: Dockerized Python service for visualization
- Production-Ready DevOps: Dockerized services, CI/CD pipelines, AWS deployment
- Description
- Tech Stack
- Software Requirements
- Architecture
- Project Structure
- How to Run
- Pipelines (CI/CD)
More details about backend and fronend components are describe in:
- Java 17
- Spring
- Gradle
- PostgreSQL
- MySQL
- Docker
- Docker Compose
- Swagger
- Python
- Matplotlib
- GPT API
- Anthropic API
Backend
- Java 17
- Gradle (or use the included Gradle Wrapper)
- Docker
- Docker Compose
Frontend
Deployment
The system is composed of five main components:
- Backend β business logic and REST API
- Frontend β user interaction SPA
- Plot Service β isolated Python service for plots
- PostgreSQL β data persistence
- LLM(s) β external AI agents for natural language processing
Components:
Request flow diagrams:
.github/
ββ workflows/ # GitHub workflows (pipelines)
backend/ # backend root
ci/
ββ scripts # scripts used in pipelines
customModel/ # [Deprecated ]custom LLM api (separate project - gpt proxy)
frontend/ # frontend app root
infra/ # infrastructure
ββ local-stack/ # docker compose stacks, files, ...
| ββ scripts # scripts
| ββ stack-date # persists data from docker containers
ββ prod-stack/ # AWS stack
ββ scripts/ # infra related scripts
README.md # Documentation
The application can be run in several ways, depending on your needs:
-
Deploy to AWS (production-like)
- Using GitHub Actions: see the Deployment Pipeline section
- Manual deployment:
infra/prod-stack/README.md
-
Run locally with Docker Compose
- Instructions:
infra/local-stack/README.md
- Instructions:
-
Run components natively (development)
- Backend:
backend/README.md - Frontend:
frontend/NoQL/README.md
- Backend:
The project uses a multi-pipeline CI/CD setup consisting of:
- Component-specific CI pipelines for the backend, frontend, and plot service
- A deployment pipeline that provisions infrastructure and deploys all components
- A tear-down pipeline that removes the AWS infrastructure
The following secrets and variables must be configured in GitHub for the CI/CD pipelines.
| Name | Description |
|---|---|
AWS_ACCESS_KEY_ID |
AWS access key ID used by deployment and tear-down pipelines |
AWS_SECRET_ACCESS_KEY |
AWS secret access key used by deployment and tear-down pipelines |
AWS_SSH_KEY_VALUE |
Private SSH key used to access the AWS EC2 instance |
BACKEND_DOT_ENV |
Backend .env file content for the production stack, variables description: backend/README.md |
FRONTEND_DOT_ENV |
Frontend .env file content for the production stack, variables description: frontend/NoQL/README.md |
DOCKERHUB_USERNAME |
Docker Hub username |
DOCKERHUB_TOKEN |
Docker Hub access token |
GH_ACCESS_TOKEN |
GitHub access token with read & write repository access |
| Name | Description |
|---|---|
AWS_SSH_KEY_NAME |
Name of the EC2 SSH key pair how to get it: infra/prod-stack/README.md |
NOQL_AWS_REGION |
AWS region where the infrastructure is deployed |
CI pipelines are triggered automatically on pull requests targeting the main branch and can
also be run manually.
Each component (backend, frontend, and plot service) has its own dedicated CI pipeline, allowing independent validation, testing, and builds.
Backend CI Pipeline
-
Validate
- Detects changes in the
backenddirectory. - If changes are detected:
- Verifies that the backend version has been incremented.
- Runs backend linting checks.
- Detects changes in the
-
Test
- Runs when:
- Backend changes were detected in the Validate job, or
- A pull request has been merged, or
- The workflow is manually triggered.
- Executes unit and integration tests with coverage reporting.
- Coverage results are published in the job summary.
- When triggered by a PR merge, updates
backend_coverage.jsonin thecoverage-badgebranch.
This file is used to generate the coverage badge displayed at the top of this file.
- Runs when:
-
Build
- Builds the backend JAR artifact.
- If the workflow is manually triggered with
push_docker=true:- Builds and pushes the Docker image
janbabak/noql-backendto Docker Hub. - The Docker image tag matches the backend version.
- Builds and pushes the Docker image
Plot Service CI Pipeline
-
Validate
- Detects changes in
plotService.Dockerfile. - If changes are detected:
- Verifies that the plot service version has been incremented.
- Detects changes in
-
Build
- Runs only when the workflow is manually triggered with
push_docker=true. - Builds and pushes the Docker image
janbabak/noql-plot-serviceto Docker Hub. - The Docker image tag matches the plot service version.
- Runs only when the workflow is manually triggered with
Frontend CI Pipeline
-
Validate
- Detects changes in the
frontenddirectory. - If changes are detected:
- Verifies that the frontend version has been incremented.
- Detects changes in the
-
Build
- Builds and packages the frontend application.
- If the workflow is manually triggered with
push_docker=true:- Builds and pushes the Docker image
janbabak/noql-frontendto Docker Hub. - The Docker image tag matches the frontend version.
- Builds and pushes the Docker image
The deployment pipeline deploys all system components (backend, frontend, and plot service) to AWS.
- The pipeline can be triggered only manually.
- It accepts a single input parameter: stack ID.
-
Deploy Infrastructure
- Authenticates with AWS.
- Deploys infrastructure defined in the CloudFormation template:
-
Deploy Application (Docker Compose)
- Loads environment variables from:
.env.backend-prod(Needs to be created).env.frontend-prod(Needs to be created)
- Starts Docker Compose, pulling Docker images from Docker Hub.
- The frontend URL is printed in the output of the Print stack URL step.
- Loads environment variables from:
The tear-down pipeline removes the AWS infrastructure.
- The pipeline can be triggered only manually.
- It accepts a single input parameter: stack ID.
- Tear Down Infrastructure
- Authenticates with AWS.
- Deletes infrastructure defined in the CloudFormation template:

