This is my undergraduate senior design project. EasyGrant is a fullstack webapp built with React with the goal of making it easier for students and faculty to find applicable research grants. This project was proposed by Professor Emily Martin of Bucknell University, a co-founder of em2CONNECT. This project had a budget of exactly $0 which gave few choices of a cloud database provider. I chose Oracle Cloud's "always free" tier which affords plenty of storage and Node-oracledb can be (somewhat*) easily integrated into a simple expressjs backend.
*oracledb does not like arm macs which is why this project is dockerized in oraclelinux
- NLP powered search bar that translates your search phrases into Oracle SQL and returns results sorted by relevancy
- Admin Dashboard that allows admins to monitor, edit, delete, and approve user submitted research grants
- Research Grant submission page that allows anyone to send admins research grants they've found
- Multi-threaded web-scraper built with Puppeteer and Cheerioto to automatically update the database with new research grants
The code for the webapp can be found in the ezgrant directory.
The code for the web-scraper can be found in the automation directory.
If you want to run this app with your own database you can follow the steps below.
Please note that this code is not production ready
- Setup an OracleCloud free account
- Create an Autonomous Data Warehouse
- Follow these instructions for downloading an instance wallet
- Save your wallet in the
ezgrant/build-resourcedirectory as well asautomation/build-resourceif you want to run the web-scraper
The following schema is required if you wish to use the existing server endpoints:
| Name | Null? | Type |
|-------------|----------|----------------|
| NAME | | VARCHAR2(255) |
| LOCATION | | VARCHAR2(255) |
| LINK | NOT NULL | VARCHAR2(255) |
| AMOUNT | | VARCHAR2(255) |
| ABOUT | | VARCHAR2(4000) |
| FREE | | CHAR(1) |
| ELIGIBILITY | | VARCHAR2(255) |
| DEADLINE | | VARCHAR2(250) |
- Oracle Instant Client Library (already built in docker image)
- Node v16 >=
- npm v9.5 >=
- Docker
cdinto theezgrantdirectory- Build using:
docker buildx build --platform linux/amd64 --pull -t ezgrants . - Run
docker run -p 8080:8080 -v $(pwd):/app -ti --rm ezgrants
In directory ezgrant, with node_modules installed run:
npm run test
- [Arm-based mac only]
brew install colimacolima start --arch aarch64 --vm-type=vz --vz-rosetta --cpu <NUM CPU CORES> --memory <NUM GIGS OF RAM> cdinto theautomationdirectory- Build using:
docker build --platform linux/amd64 --pull -t automation . - Run
docker run --shm-size=1G --memory <NUM GIGS OF RAM>g --cpus="<NUM CPU CORES>" --platform=linux/amd64 -p 3000:3000 -v $(pwd):/app -ti --rm automation