Skip to content

My second Node.js/React project. A web app which allows users to add notes and incorporates PostgreSQL database functionality.

License

Notifications You must be signed in to change notification settings

andrewblais/note-take

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

26 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

⚠️ Archived portfolio project
Dependencies were current as of September 2025.
This repository is maintained for reference and demonstration purposes.

πŸ“ note-take

Version License Built with Status

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.


πŸ“š Table of Contents


πŸ–Ό Screenshots

πŸ–₯ Desktop View (Firefox)

desktop

πŸ“± Mobile Display

mobile

🎭 Add a Joke

joke

πŸ’¬ Add a Quote

quote

πŸ—‘ Delete All Notes

delete

↕️ Sort Four Ways

sort


πŸš€ Installation/Getting Started

⚠️ This app is currently configured for local development. Cloud deployment (via AWS EC2 + S3) is underway.

Prerequisites

1. Setup Node and npm

npm install -g npm@latest
nvm install --lts
nvm use <version_number>

2. Install Dependencies

npm install

Or manually:

npm i react
npm i @mui/icons-material @mui/material @emotion/styled @emotion/react

3. Update All Dependencies (Optional)

npm update
npx npm-check-updates -u
npm install

4. Initialize Frontend (Vite)

npm create vite@latest note-take --template react
cd note-take
npm install

5. Run React and Node Servers

In separate terminals:

# Terminal 1:
npm run dev

# Terminal 2:
npm run server

πŸ›’ Database Setup

Using pgAdmin 4 for local PostgreSQL management:

Create Database

  • In pgAdmin 4, right-click on Databases β†’ Create β†’ Database
  • Name it: note_take

Create Table

CREATE TABLE note_take (
    id SERIAL PRIMARY KEY,
    note_name VARCHAR(50),
    note_date VARCHAR(20),
    note_content VARCHAR(250)
);

Rename Table

ALTER TABLE note_take RENAME TO notes;

Rename a Column

ALTER TABLE notes RENAME note_name TO note_title;

Insert Sample Rows

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.');

πŸ“Έ Table Preview

pgAdmin


πŸ—‚ Project Structure

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

🧠 Reflections & Pain Points

Things I Learned

  • useState and useEffect were initially confusing, but they’re starting to click with practice.
  • Passing props and tracing them across component hierarchies took a lot of repetition to understand.
  • I customized prop names like function AllNotes(allNotesProps) for clarity.
  • Differentiating .js and .jsx is 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 className don’t pass to custom components β€” must be forwarded internally.

Developer Notes

  • 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.

πŸ“¦ Resources


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

πŸ”— GitHub | Portfolio

About

My second Node.js/React project. A web app which allows users to add notes and incorporates PostgreSQL database functionality.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published