β οΈ Archived portfolio project
Dependencies were current as of September 2025.
This repository is maintained for reference and demonstration purposes.
note-take is a full-stack, single-page note-taking app built with React, Node.js, and PostgreSQL. Users can write their own notes or auto-generate jokes and quotes from public APIs. Data is persisted locally via PostgreSQL and managed through pgAdmin 4.
This app was built as the capstone project for Angela Yuβs Complete Full-Stack Web Development Bootcamp on Udemy.
β οΈ This app is currently configured for local development. Cloud deployment (via AWS EC2 + S3) is underway.
npm install -g npm@latest
nvm install --lts
nvm use <version_number>npm installOr manually:
npm i react
npm i @mui/icons-material @mui/material @emotion/styled @emotion/reactnpm update
npx npm-check-updates -u
npm installnpm create vite@latest note-take --template react
cd note-take
npm installIn separate terminals:
# Terminal 1:
npm run dev
# Terminal 2:
npm run serverUsing pgAdmin 4 for local PostgreSQL management:
- In
pgAdmin 4, right-click on Databases β Create β Database - Name it:
note_take
CREATE TABLE note_take (
id SERIAL PRIMARY KEY,
note_name VARCHAR(50),
note_date VARCHAR(20),
note_content VARCHAR(250)
);ALTER TABLE note_take RENAME TO notes;ALTER TABLE notes RENAME note_name TO note_title;INSERT INTO notes (note_title, note_date, note_content)
VALUES
('Grocery List', '4/1/2025 13:00', 'Lemons\nApples'),
('Workout', '4/1/2025 13:02', 'Run 4 miles'),
('Note to Self', '4/1/2025 13:04', 'Don''t forget to tip the mailman.');note-take
βββ .env
βββ .gitignore
βββ client/
β βββ index.html
β βββ public/
β β βββ pencil_120.png
β β βββ pencil_32.ico
β βββ src/
β βββ App.css
β βββ App.jsx
β βββ assets/
β βββ components/
β β βββ AllNotes.jsx
β β βββ Footer.jsx
β β βββ formatDate.js
β β βββ Header.jsx
β β βββ Joke.jsx
β β βββ NewNote.jsx
β β βββ OneNote.jsx
β β βββ RadioSortButton.jsx
β β βββ RadioSortButtons.jsx
β βββ data/
β β βββ exampleNotes.js
β βββ main.jsx
βββ devNotes.ipynb
βββ eslint.config.js
βββ LICENSE
βββ package.json
βββ server/
β βββ index.js
β βββ utils/
β βββ formatDate.js
βββ struct.md
βββ vite.config.js
useStateanduseEffectwere initially confusing, but theyβre starting to click with practice.- Passing
propsand tracing them across component hierarchies took a lot of repetition to understand. - I customized prop names like
function AllNotes(allNotesProps)for clarity. - Differentiating
.jsand.jsxis more about preference and tooling than strict rules. - React requires lowercase HTML elements but PascalCase custom components.
- CSS import paths can be tricky in Vite; trial-and-error helped a lot.
- HTML attributes like
classNamedonβt pass to custom components β must be forwarded internally.
- I focused on giving the app a warm, friendly feel using subtle transitions and natural styling in
App.css. - I kept comments minimal during active coding to stay mentally clear β but plan to add thorough docstrings and inline docs soon.
- Node.js
- React
- Material UI
- Font Awesome
- Bootstrap
- Google Fonts
- GIMP
- pgAdmin 4
- icanhazdadjoke API
- favqs API
- MDN Web Docs
- Stack Overflow
- ChatGPT
If you spot anything broken or unclear, feel free to open an issue or PR. Thanks for visiting!
Andrew Blais, Boston, Massachusetts
π Student of full-stack web development, machine learning, and software engineering
π Boston, Massachusetts






