Skip to content

Monorepo merge #130

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 125 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
30c2108
first commit
Michael-Dratch May 18, 2025
e633d94
Created base frontend components
Michael-Dratch May 18, 2025
133490e
added fireabase hosting to frontend
Michael-Dratch May 31, 2025
c6ae308
no result decision returns empty result instead of error
Michael-Dratch May 31, 2025
19a7977
updated firebase config
Michael-Dratch May 31, 2025
a046466
added dmn model view
Michael-Dratch May 31, 2025
010a679
added other screens
Michael-Dratch Jun 1, 2025
09fc1a1
created builder api project
Michael-Dratch Jun 3, 2025
dd6d0c4
save selectedProject in session storage
Michael-Dratch Jun 3, 2025
a079f0a
created get screeners and get screener endpoint
Michael-Dratch Jun 7, 2025
1fc5910
added post and update screener endpoints
Michael-Dratch Jun 7, 2025
f52a1d6
Save form and dmn endpoints
Michael-Dratch Jun 8, 2025
a54db0b
Decision endpoint
Michael-Dratch Jun 8, 2025
f40e062
delete screener endpoint
Michael-Dratch Jun 8, 2025
6045f1d
updateding screener api
Michael-Dratch Jun 8, 2025
ac0eb70
updated publish endpoint
Michael-Dratch Jun 8, 2025
73ca3d8
updated screener api
Michael-Dratch Jun 8, 2025
bd1d4f8
add fetchScreeners to frontend
Michael-Dratch Jun 8, 2025
d6fcb84
API calls on projectlist screen
Michael-Dratch Jun 9, 2025
946f6f2
DMN Viewer calls
Michael-Dratch Jun 10, 2025
05827c5
completed save and preview
Michael-Dratch Jun 12, 2025
4da0e8f
connected publish screen to api
Michael-Dratch Jun 12, 2025
986c20f
refactored tabs
Michael-Dratch Jun 12, 2025
e9323a5
add solid router to screener frontend
Michael-Dratch Jun 12, 2025
84646ed
updated screener frontend api calls
Michael-Dratch Jun 12, 2025
e52d2c0
added deployment steps doc
Michael-Dratch Jun 12, 2025
883d047
update publish screen
Michael-Dratch Jun 12, 2025
ddc3849
created login signup page
Michael-Dratch Jun 14, 2025
65f37f8
finished auth context
Michael-Dratch Jun 15, 2025
9d138dd
updated routing to handle auth
Michael-Dratch Jun 15, 2025
daa532a
added authentication to back end
Michael-Dratch Jun 16, 2025
97e59ee
finished authentication
Michael-Dratch Jun 17, 2025
c57a74a
created edit screener form
Michael-Dratch Jun 17, 2025
12a1464
added delete screener
Michael-Dratch Jun 18, 2025
2a02bf0
updated fireabse config for builder frontend hosting
Michael-Dratch Jun 20, 2025
c8dda6c
fix new project modal bug
Michael-Dratch Jun 20, 2025
6264153
replaced camunda modeler and engine with KIE enginer and kogito modeler
Michael-Dratch Jun 21, 2025
84d68f3
removed camunda modeler component
Michael-Dratch Jun 21, 2025
e3ead51
updated screener api to use kie dmn engine
Michael-Dratch Jun 21, 2025
56d737b
dynamically parse dmn name and namespace
Michael-Dratch Jun 22, 2025
30215f2
updated screener api to parse dmn name and namespace
Michael-Dratch Jun 22, 2025
1d20add
updated order of tabs
Michael-Dratch Jun 24, 2025
17d82ba
Add included model resources to dmn editor
Michael-Dratch Jun 27, 2025
e2bfb34
removed logs
Michael-Dratch Jun 27, 2025
5f16a82
return dmnResult error messages
Michael-Dratch Jun 28, 2025
ccd1eb2
disable utility model in frontend
Michael-Dratch Jun 28, 2025
d67e363
Save compiled dmn module on publish
Michael-Dratch Jun 29, 2025
6865178
api builder compiles dmn on preview and publish
Michael-Dratch Jun 30, 2025
ce2952a
updating dmn evaluation in screener api
Michael-Dratch Jun 30, 2025
c8281da
screener-api uses compiled dmn
Michael-Dratch Jul 1, 2025
4038b63
updated screener frontend header styles
Michael-Dratch Jul 1, 2025
abdbbfe
fix capitalization error in import statement in "builder-frontend/src…
earth-walker Jul 3, 2025
294d6d2
implement cosmetic LOOP card in results
earth-walker Jul 3, 2025
48dfd6d
add code owners
Michael-Dratch Jul 4, 2025
3e581c3
Merge pull request #1 from earth-walker/main
Michael-Dratch Jul 4, 2025
de48a42
created storage service interface
Michael-Dratch Jul 4, 2025
bbdc1ef
removed unused method
Michael-Dratch Jul 4, 2025
d4f353b
Merge branch 'main' into add_tests
Michael-Dratch Jul 4, 2025
762c9eb
Merge pull request #2 from Michael-Dratch/add_tests
Michael-Dratch Jul 4, 2025
a002b23
implement basic version of traffic light results section, given stati…
earth-walker Jul 4, 2025
2ae591f
Added DMN Model and mapper
Michael-Dratch Jul 5, 2025
4658fc5
Merge branch 'main' into add_public_models
Michael-Dratch Jul 5, 2025
3306155
Merge branch 'main' into results-card
earth-walker Jul 7, 2025
4a637b1
created availble models ui
Michael-Dratch Jul 8, 2025
b80b5ae
separate the test data into its own file and separate the traffic lig…
earth-walker Jul 9, 2025
765caf6
make eligibility results component more self-contained and remove it …
earth-walker Jul 9, 2025
759d3a6
fully restore results component to original state
earth-walker Jul 9, 2025
a050400
Merge pull request #4 from earth-walker/results-card
Michael-Dratch Jul 10, 2025
0a62009
Refactored models package and added test class for importDmnService
Michael-Dratch Jul 18, 2025
11b4acf
Added add dependency and remove dependency endpoints
Michael-Dratch Jul 20, 2025
9a80112
Add dmnModelSummary DTO
Michael-Dratch Jul 20, 2025
73382f1
Add get dmn model xml endpoint
Michael-Dratch Jul 20, 2025
759d65f
Connected import model tab to backend
Michael-Dratch Jul 20, 2025
413065e
removed session storage state management and setup solid router
Michael-Dratch Jul 20, 2025
231f0ee
dmn compile includes screener dependencies
Michael-Dratch Jul 22, 2025
d004ae5
Merge pull request #5 from Michael-Dratch/add_public_models
Michael-Dratch Jul 22, 2025
12cbdad
fix artifact_id validation
Michael-Dratch Jul 22, 2025
2359e00
Merge pull request #6 from Michael-Dratch/bug_fixes
Michael-Dratch Jul 22, 2025
ebe6ced
Prep for monorepo by moving everything to dmn-library dir
prestoncabe Jul 25, 2025
7f8822e
Merge remote-tracking branch 'michaels-repo/main' into monorepo-merge
prestoncabe Jul 25, 2025
ed32a74
Add starting .idx files
prestoncabe Jul 29, 2025
56fd6b5
add location service
Michael-Dratch Jul 30, 2025
4f091eb
Add location service to screener api
Michael-Dratch Jul 30, 2025
e57f92a
Add model library
Michael-Dratch Jul 30, 2025
ecc6adb
.idea updates
Michael-Dratch Jul 30, 2025
ca4b143
wip setting up firebase project
prestoncabe Jul 30, 2025
f2768f7
wip able to deploy frontends
prestoncabe Jul 30, 2025
4c56371
add location service
Michael-Dratch Jul 30, 2025
248e11b
Add location service to screener api
Michael-Dratch Jul 30, 2025
cc7e4fd
Add model library
Michael-Dratch Jul 30, 2025
6231e4e
.idea updates
Michael-Dratch Jul 30, 2025
608797b
Added DMN Model and mapper
Michael-Dratch Jul 5, 2025
47ec666
created availble models ui
Michael-Dratch Jul 8, 2025
4869ab6
Refactored models package and added test class for importDmnService
Michael-Dratch Jul 18, 2025
75c255f
Added add dependency and remove dependency endpoints
Michael-Dratch Jul 20, 2025
db7d676
Add dmnModelSummary DTO
Michael-Dratch Jul 20, 2025
661efb1
Add get dmn model xml endpoint
Michael-Dratch Jul 20, 2025
cc72204
Connected import model tab to backend
Michael-Dratch Jul 20, 2025
50b4bb5
removed session storage state management and setup solid router
Michael-Dratch Jul 20, 2025
3e90e57
dmn compile includes screener dependencies
Michael-Dratch Jul 22, 2025
eae0039
fix artifact_id validation
Michael-Dratch Jul 22, 2025
c84cd09
add location service
Michael-Dratch Jul 30, 2025
18fa02a
Add location service to screener api
Michael-Dratch Jul 30, 2025
4924d8a
Add model library
Michael-Dratch Jul 30, 2025
b2533ef
.idea updates
Michael-Dratch Jul 30, 2025
c65f899
add header and footer components to the screener page and adjust spac…
earth-walker Jul 5, 2025
527f5a5
use relative units for font size in form.
earth-walker Jul 7, 2025
f4cebe4
pass in data to populate header and footer
earth-walker Jul 9, 2025
7f2b10c
change org name in test data
earth-walker Jul 9, 2025
9faaedd
add information and link to application for each benefit and replace …
earth-walker Jul 10, 2025
de14cc8
use conditional rendering to display elgigibility info per benefit an…
earth-walker Jul 10, 2025
be2af1a
implement Janie's traffic light card design
earth-walker Jul 14, 2025
b3c7d56
modify data structure to include human-friendly names of benefits and…
earth-walker Jul 14, 2025
86392ab
undo changes to screener api styling
earth-walker Jul 31, 2025
ed87fc1
remove header and footer components
earth-walker Jul 31, 2025
d18b1b4
remove cosmetic LOOP card and associated assets
earth-walker Jul 31, 2025
92a00d3
Merge branch 'results-card' into results-card-updates
earth-walker Jul 31, 2025
5d2e8b6
Merge pull request #8 from earth-walker/results-card-updates
Michael-Dratch Jul 31, 2025
006f0c4
WIP add devbox config back to root of project.
prestoncabe Jul 31, 2025
becd89d
fixed new screener no dependency array bug
Michael-Dratch Jul 31, 2025
ef529fc
Merge branch 'main' of https://github.com/Michael-Dratch/Benefits-Dec…
Michael-Dratch Jul 31, 2025
6e01065
Add podman to devbox config
prestoncabe Aug 7, 2025
a154c35
Merge remote-tracking branch 'michaels-repo/main' into monorepo-merge
prestoncabe Aug 7, 2025
3c3f91e
Devbox update
prestoncabe Aug 7, 2025
7c63596
WIP add new devbox deps and allow builder-api deployment
prestoncabe Aug 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions .firebaserc
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"projects": {
"default": "benefit-decision-toolkit-play"
},
"targets": {
"benefit-decision-toolkit-play": {
"hosting": {
"screener-frontend": [
"bdt-screener"
],
"builder-frontend": [
"bdt-builder"
]
}
}
},
"etags": {}
}
18 changes: 18 additions & 0 deletions .firebaserc.old.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"projects": {
"default": "benefits-decision-toolkit"
},
"targets": {
"benefits-decision-toolkit": {
"hosting": {
"screener-frontend": [
"benefits-decision-toolkit"
],
"builder-frontend": [
"bdt-screener-builder"
]
}
}
},
"etags": {}
}
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @Michael-Dratch
77 changes: 73 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,74 @@
target/
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
firebase-debug.log*
firebase-debug.*.log*

thunder-tests/thunderResponses.json
thunder-tests/res-files/
thunder-tests/thunderActivity.json
# Firebase cache
.firebase/

# Firebase config

# Uncomment this if you'd like others to create their own Firebase project.
# For a team working on the same Firebase project(s), it is recommended to leave
# it commented so all members can deploy to the same project(s) in .firebaserc.
# .firebaserc

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# dataconnect generated files
.dataconnect
# IntelliJ
.idea
*.ipr
*.iml
*.iws
5 changes: 5 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/Benefits-Decision-Toolkit.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 13 additions & 27 deletions .idx/dev.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# To learn more about how to use Nix to configure your environment
# see: https://developers.google.com/idx/guides/customize-idx-env
# see: https://firebase.google.com/docs/studio/customize-workspace
{ pkgs, ... }: {
# Which nixpkgs channel to use.
channel = "stable-24.05"; # or "unstable"
Expand All @@ -8,36 +8,21 @@
packages = [
pkgs.maven
pkgs.quarkus
pkgs.jdk17
pkgs.jdk21
];

# Sets environment variables in the workspace
env = {
# PORT = "8080";
};
env = {};
idx = {
# Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
extensions = [
"jellydn.toggle-excluded-files"
"waderyan.gitblame"
"kie-group.dmn-vscode-extension"
"rangav.vscode-thunder-client"
"redhat.vscode-xml"
"mhutchie.git-graph"
"redhat.java"
"redhat.vscode-quarkus"
# "vscodevim.vim"
];

# Enable previews
# previews = {
# enable = true;
# previews = {
# web = {
# command = [
# "bin/dev"
# ];
# manager = "web";
# };
previews = {
enable = true;
previews = {
# web = {
# # Example: run "npm run dev" with PORT set to IDX's defined port for previews,
# # and show it in IDX's web preview panel
Expand All @@ -48,19 +33,20 @@
# PORT = "$PORT";
# };
# };
# };
# };
};
};

# Workspace lifecycle hooks
workspace = {
# Runs when a workspace is first created
onCreate = {
install-default-settings = "cp .idx/default-vscode-settings.jsonc /home/user/.codeoss-cloudworkstations/data/Machine/settings.json";
install-thunder-client-tests = "ln -s /home/user/dmn-benefit-toolbox/thunder-tests/ /home/user/.codeoss-cloudworkstations/data/User/globalStorage/rangav.vscode-thunder-client";
# Example: install JS dependencies from NPM
# npm-install = "npm install";
};
# Runs when the workspace is (re)started
onStart = {
start-quarkus-dev-server = "bin/dev";
# Example: start a background task to watch and re-build backend code
# watch-backend = "npm run watch-backend";
};
};
};
Expand Down
3 changes: 3 additions & 0 deletions .idx/integrations.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
"firebase_hosting": {
"deploymentHostingUrl": "https://benefit-decision-toolkit-play.web.app"
},
"cloud_run_deploy": {
"region": "us-east4",
"sourceFlag": "--source .",
Expand Down
120 changes: 2 additions & 118 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,119 +1,3 @@
# Benefit Decision Toolkit
### Benefits Decision Toolkit Web App

**Use [DMN](https://www.omg.org/dmn/) and [FEEL](https://docs.camunda.io/docs/components/modeler/feel/what-is-feel/) to create APIs and Screeners for public benefit rules.**

## Motivation

Why hire a team of software engineers to codify rules that your benefit experts already know inside and out?

Why design a screening tool from scratch when your goal is simply to deploy a functionally accurate service as quickly as possible?

***Benefit Decision Toolkit simplifies the management of eligibility rules and screeners so motivated subject matter experts can create useful tools with less hand-holding from traditional software teams.***

## Examples

### The Philly Property Tax Relief Screener

As a proof of concept, we've built a screener for several of the [tax relief benefits available in Philadelphia](https://www.phila.gov/services/payments-assistance-taxes/taxes/property-and-real-estate-taxes/get-real-estate-tax-relief/).

You can interact with the screener yourself at: https://phillypropertytaxrelief.org.

### JSON ("REST") API

A JSON API is generated from the eligibility rules created in DMN/FEEL. You can interact with the endpoints of this API at: https://phillypropertytaxrelief.org/q/swagger-ui/

## Setup a Development Environment

Since the ultimate goal of this project is to enable a development environment that is accessible to those without a software engineering background, we are intrigued by tools like [Firebase Studio](https://firebase.google.com/docs/studio) as a precursor/mockup for a more specialized service that we'd like to build (eventually).

With Firebase Studio, the environment is in the cloud, and can be accessed from any computer without any manual setup.

If you're an experienced engineer, however, you may want to skip Firebase Studio in favor of your own preferred setup. (Up to you.)

### Use Firebase Studio (simplest)

The easiest way to get a feel for Benefit Decision Toolkit is to [fork this repo*](https://github.com/CodeForPhilly/benefit-decision-toolkit/fork) and then open it (from the fork!) in Firebase Studio:

<a href="https://studio.firebase.google.com/import?url=https%3A%2F%2Fgithub.com%2FCodeForPhilly%2Fbenefit-decision-toolkit">
<picture>
<source
media="(prefers-color-scheme: dark)"
srcset="https://cdn.firebasestudio.dev/btn/open_dark_32.svg">
<source
media="(prefers-color-scheme: light)"
srcset="https://cdn.firebasestudio.dev/btn/open_light_32.svg">
<img
height="32"
alt="Open in Firebase Studio"
src="https://cdn.firebasestudio.dev/btn/open_blue_32.svg">
</picture>
</a>

When you open Benefit Decision Toolkit in Firebase Studio, a development machine will be created and configured for you in the cloud. (This will take a few minutes.)

After the first time you open the project, you can just return to https://studio.firebase.google.com to pick up where you left off.

_*Note on forking: you can skip this step if you are just curious or otherwise don't intend to contribute changes back to the project._

### Use Devbox (medium simple)

The second easiest way to get started is to [fork this repo*](https://github.com/CodeForPhilly/benefit-decision-toolkit/fork), clone it to your local machine, and use the included Devbox configuration:

[![Built with Devbox](https://www.jetify.com/img/devbox/shield_galaxy.svg)](https://www.jetify.com/devbox/docs/contributor-quickstart/)

[Devbox](https://www.jetify.com/devbox) is a way to create isolated development environments on your own machine.

We're experimenting w/ Devbox for the same reason we're experimenting w/ Firebase Studio; we're interested in how this approach to managing development environments could form the basis of some future specialized/packaged toolkit.

### Roll your own (for experienced developers)

Of course, you can also manually setup a laptop/desktop to work on Benefit Decision Toolkit, but it isn't recommended unless you really know what you're doing.

### Additional setup notes

#### Forms development

If you're planning to develop forms (the basis of eligibility screeners) in addition to eligibility rules, then you'll also need to download [Camunda Modeler](https://camunda.com/download/modeler/).

#### Kicking the tires and testing your work

You can run `bin/dev`* from a terminal to start the Quarkus development server. This will serve the API and any existing eligibility screeners from `https://localhost:8080`**.

*_If you are using Firebase Studio the Quarkus dev server should automatically start when you load the workspace._

**_Since Firebase Studio is a browser-based environment, the system will map the URL for the dev server to an address you can reach from a browser in your local machine. You can access this address by clicking on the Firebase Studio logo in the left sidebar, then clicking into the "Backend Ports" panel._

<img src="docs/images/backend-ports.png" width=600 alt="Screenshot of Backend Ports list in Firebase Studio">

## Technologies overview

We use a combination of open-source tools ([Kogito](https://kogito.kie.org/) and [form-js](https://bpmn.io/toolkit/form-js/)) with some scaffolding to tie them together and make them easier to use.

Here are some high-level things to orient you...

### DMN Files

DMN files (`.dmn`) can be edited directly in VS Code via the [DMN Editor extension](https://marketplace.visualstudio.com/items?itemName=kie-group.dmn-vscode-extension). If you're using Firebase Studio as described above, then this extension is already installed for you. If you're using another dev environment, then you'll need to install the extension manually.

You may occasionally need to interact with the raw XML text of the DMN; this can be done via the "Reopen with Text Editor" feature of VS Code.

A good orientation on the basics of DMN can be found [here](https://learn-dmn-in-15-minutes.com/).

In this project, DMN (and its accompanying expression language FEEL) acts as the "source code" for a JSON web API. Kogito generates this API (with Java) when you run the Quarkus development server (automatic with Firebase Studio, or by running the `bin/dev` script).

### Form Files

Form files (`.form`) can be edited using [Camunda Modeler](https://camunda.com/download/modeler/). The modeler provides a UI for designing the form's layout and logic (which often incorporates FEEL expressions).

Behind the scenes,the form is saved in JSON format.

When it comes time to use the form in a screener, form-js interprets this JSON and uses it to display the form on a web page.

### Eligibility Screeners

To create the [Philadelphia Property Tax Relief Screener](https://phillypropertytaxrelief.org), we've written a [Qute template](https://quarkus.io/guides/qute) which displays the form, posts data as it is collected to the eligibility API (the one that is built from the DMN), and receives back eligibility results for display on the form.

For future screeners, we envision packaging up this functionality somehow, allowing the entire screening and results process to be included as part of other websites and tools, the content of which is outside the scope of this project.

## License
See the [LICENSE](https://github.com/CodeForPhilly/benefit-decision-toolkit/blob/main/LICENSE.md) file for license rights and limitations (MIT).
Welcome to the BDT Web App! The BDT Web App is a project focusing on building a cloud-based platform that makes it easy to build, test, and share benefit eligibility screeners.
5 changes: 5 additions & 0 deletions builder-api/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*
!target/*-runner
!target/*-runner.jar
!target/lib/*
!target/quarkus-app/*
Loading