Thursday, February 19, 2026

Let's Build Peter Pt. 4

Since the backend is working, we can now start using the middleware packages we installed earlier.

Let's begin with morgan.

import express from "express";
import morgan from "morgan";

const app = express();

app.use(morgan("tiny"));

app.get("/ping", (req, res) => {
    return res.json({ data: "pong" });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`http://localhost:${PORT}`);
});

Now that logging is in place, the next middleware we will configure is cors. We will whitelist the React application's URL: http://localhost:5173.

import express from "express";
import morgan from "morgan";
import cors from "cors";

const app = express();

app.use(morgan("tiny"));
app.use(
    cors({
        origin: "http://localhost:5173",
    }),
);

app.get("/ping", (req, res) => {
    return res.json({ data: "pong" });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`http://localhost:${PORT}`);
});

Finally, let's add helmet and compression.

import express from "express";
import morgan from "morgan";
import cors from "cors";
import helmet from "helmet";
import compression from "compression";

const app = express();

app.use(morgan("tiny"));
app.use(
    cors({
        origin: "http://localhost:5173",
    }),
);
app.use(helmet());
app.use(compression());

app.get("/ping", (req, res) => {
    return res.json({ data: "pong" });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`http://localhost:${PORT}`);
});

Perfect! Now visit http://localhost:3000/ping. It should return the same output as before. However, this time you will also see the request being logged in the terminal.

Yes — it’s working for me ЁЯСН

Now is a good time to open Insomnia (or any other API client). Send a request to the same endpoint and confirm that you receive: { "data": "pong" }

Cleaning Up the Frontend

On the frontend side, let’s clean up the scaffolded application:

  • Remove the public folder
  • Remove the src/assets folder
  • Remove the App.css file

After cleaning up, your folder structure should look minimal and clean.

Now open the App.jsx file and replace its content with the following:

const App = () => {
    return <h1>hello, world</h1>;
};

export default App;

Run the React application using:

npm run dev

Within a few seconds, the application should be available at: http://localhost:5173. Visit the URL and confirm that you see: hello, world.

Both applications are now running — yay! ЁЯОЙ

Tuesday, February 17, 2026

рк╢્рк░ркж્ркзાркиું ркЬોрк░

рк╢્рк░ીрк░ાркоркХૃрк╖્ркг - (ркХેркжાрк░ркиે) рк╢્рк░ркж્ркзાркиું ркЬોрк░ ркХેркЯрк▓ું ркЫે ркдે ркдો рк╕ાંркнрк│્ркпું ркЫે ркиે? рккુрк░ાркгркоાં ркХрк╣્ркпું ркЫે ркХે рк░ાркоркЪંркж્рк░ ркХે ркЬે рк╕ાркХ્рк╖ાркд્ рккૂрк░્ркг ркм્рк░рк╣્рко ркиાрк░ાркпркг, ркдેркоркиે рк▓ંркХાркоાં рккрк╣ોંркЪрк╡ા рк╕ાрк░ુ рккુрк▓ ркмાંркзрк╡ો рккркб્ркпો, рккркг рк╣ркиુркоાрки рк░ાркоркиાркоркоાં рк╢્рк░ркж્ркзા рк░ાркЦીркиે ркПркХ ркЬ ркЫрк▓ાંркЧે рк╕ркоુркж્рк░ркиી рккેрк▓ી рккાрк░ ркХૂркжી рккркбркпા. ркдેркоркиે рккુрк▓ркиી ркЬрк░ૂрк░ ркирк╣િ. (рк╕ૌркиું рк╣ાрк╕્ркп)

~ рк╢્рк░ીрк░ાркоркХૃрк╖્ркг ркХркеાркоૃркдркоાંркеી

Monday, February 16, 2026

Let's Build Peter Pt. 3

Inside the backend folder, let’s create an app.js file and write some base code to test our setup.

touch app.js

We will use the modern import...from syntax. We’ll update the necessary configuration in the package.json file shortly.

import express from "express";

const app = express();

Now, let’s define a /ping route that returns "pong" as a JSON response.

import express from "express";

const app = express();

app.get("/ping", (req, res) => {
    return res.json({ data: "pong" });
});

ЁЯТб Tip: Always use return when you want to stop the execution of a function after sending a response.

We will use port 3000 because the React application created using Vite runs on port 5173 by default.

import express from "express";

const app = express();

app.get("/ping", (req, res) => {
    return res.json({ data: "pong" });
});

const PORT = process.env.PORT || 3000;

Finally, let’s start the server and print the URL for future reference and debugging.

import express from "express";

const app = express();

app.get("/ping", (req, res) => {
    return res.json({ data: "pong" });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`http://localhost:${PORT}`);
});

We need to make the following changes in the package.json file:

  • Change "type" from "commonjs" to "module" to support the import...from syntax.
  • Change "main" from index.js to app.js.
{
    "name": "backend",
    "version": "1.0.0",
    "description": "",
    "main": "app.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "type": "module",
    "dependencies": {
        "compression": "1.8.1",
        "cors": "2.8.6",
        "express": "5.2.1",
        "helmet": "8.1.0",
        "morgan": "1.10.1",
        "postgres": "3.4.8"
    }
}

I almost forgot — we also need nodemon to automatically restart the server when files change during development.

ЁЯТб Tip: This is an example of a non-perfect setup. You will always miss something — and that’s completely fine.

Install nodemon as a development dependency:

npm i -E -D nodemon

Now, let’s add two scripts to package.json:

  • dev → runs nodemon app.js
  • start → runs node app.js
{
    "name": "backend",
    "version": "1.0.0",
    "description": "",
    "main": "app.js",
    "scripts": {
        "dev": "nodemon app.js",
        "start": "node app.js"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "type": "module",
    "dependencies": {
        "compression": "1.8.1",
        "cors": "2.8.6",
        "express": "5.2.1",
        "helmet": "8.1.0",
        "morgan": "1.10.1",
        "postgres": "3.4.8"
    },
    "devDependencies": {
        "nodemon": "3.1.11"
    }
}

With these changes, we are ready to run the application. Both scripts will start the server, but during development, we usually use:

npm run dev

Now open your browser and visit http://localhost:3000/ping. You should see { "data": "pong" } And yup — it’s working! ЁЯОЙ If everything works on your side, you’re ready to head over to the next article.

Sunday, February 15, 2026

Let's Build Peter Pt. 2

Let’s create a folder named peter and navigate into it.

mkdir peter
cd peter

Now, create two folders — frontend and backend. As the names suggest, the frontend folder will contain the React code, and the backend folder will contain the Node.js code.

mkdir frontend backend

Inside the frontend folder, let’s create a React application using Vite with the JavaScript template.

cd frontend
npm create vite@latest . -- --template react

While the process is running, open a new terminal tab (or window), navigate to the backend folder, and perform some initial setup such as creating a package.json file and installing the required dependencies.

cd ../backend

Let’s create a package.json file:

npm init -y

Now, install the express and postgres packages:

npm i -E express postgres

Next, install a few middleware packages:

  • morgan for logging
  • helmet for security
  • cors to allow API calls from the React application
  • compression to compress responses
npm i -E morgan helmet cors compression

Great! The initial setup is complete, and we’re ready to get started.

Saturday, February 14, 2026

рк╕рк░્рк╡ркнૂркдркоાં ркиાрк░ાркпркг

рк╢્рк░ીрк░ાркоркХૃрк╖્ркг (ркирк░ેрки્ркж્рк░ркиે) - ркирк░ેрки્ркж્рк░! ркдું рк╢ું ркХрк╣ે ркЫે? рк╕ંрк╕ાрк░ી рк▓ોркХો ркдો ркХેркЯрк▓ુંркп ркмોрк▓ે! рккркг ркЬો, рк╣ાркеી ркЬ્ркпાрк░ે рк░рк╕્ркдાркоાં рк╣ોркп, ркд્ркпાрк░ે ркХેркЯрк▓ાંркп ркк્рк░ાркгીркУ ркдેркиી рккાркЫрк│ рккркбે, рккркг рк╣ાркеી ркдેркиી рк╕ાркоું ркЬુркП рккркг ркирк╣િ. ркдાрк░ી ркЬો ркХોркИ ркиિંркжા ркХрк░ે, ркдો ркдркиે ркХેрк╡ું рк▓ાркЧે?
 

ркирк░ેрки્ркж્рк░ - рк╣ું ркоાркиું ркХે ркХૂркдрк░ાં рк╣ાркЙ рк╣ાркЙ ркХрк░ે ркЫે.
 

рк╢્рк░ીрк░ાркоркХૃрк╖્ркг (рк╣рк╕ીркиે) – ркиા рк░ે ркиા, ркПркЯрк▓ું ркмркзું ркирк╣િ. (рк╕ૌркиું рк╣ાрк╕્ркп) ркИрк╢્рк╡рк░ ркк્рк░ાркгી ркоાркд્рк░ркоાં ркЫે. рккркг рк╕ાрк░ા ркоાркгрк╕ોркиી рк╕ાркеે рк╣рк│рк╡ું ркорк│рк╡ું ркЪાрк▓ે; ркЬ્ркпાрк░ે ркирк░рк╕ા ркоાркгрк╕ોркеી ркжૂрк░ рк░рк╣ેрк╡ું ркЬોркИркП. ркПрко ркдો рк╡ાркШркиી ркЕંркжрк░ рккркг ркиાрк░ાркпркг ркЫે; ркПркЯрк▓ે ркХંркИ рк╡ાркШркиે ркнેркЯી рккркбાркп ркирк╣િ! (рк╕ૌркиું рк╣ાрк╕્ркп). ркЬો ркПрко ркХрк╣ો ркХે рк╡ાркШ ркдો ркиાрк░ાркпркг ркЫે, ркдો рккркЫી ркнાркЧી рк╢ા ркоાркЯે ркЬрк╡ું? ркдેркиો ркЬрк╡ાркм ркП ркХે ркЬેркУ ркХрк╣ે ркЫે ркХે ‘ркнાркЧી ркЬાркУ' ркдેркУ рккркг ркиાрк░ાркпркг ркЫે, ркдો ркдેркоркиી рк╡ાркд ркХેрко рки рк╕ાંркнрк│рк╡ી?
 

'ркПркХ рк╡ાркд рк╕ાંркнрк│ો. ркПркХ ркЬંркЧрк▓ркоાં ркПркХ рк╕ાркзુ рк░рк╣ેркдો рк╣ркдો. ркдેркиે ркЕркиેркХ рк╢િрк╖્ркпો. ркдેркгે ркПркХ ркжિрк╡рк╕ે рк╢િрк╖્ркпોркиે ркЙрккркжેрк╢ ркЖркк્ркпો ркХે рк╕рк░્рк╡ркнૂркдркоાં ркиાрк░ાркпркг ркЫે, ркПрко ркЬાркгીркиે рк╕ૌркиે ркиркорк╕્ркХાрк░ ркХрк░рк╡ા. ркПркХ ркжિрк╡рк╕ ркПркХ рк╢િрк╖્ркп рк╣ોрко ркоાркЯે рк▓ાркХркбાં рк╡ીркгрк╡ા ркЬંркЧрк▓ркоાં ркЧркпો. ркП рк▓ાркХркбાં рк╡ીркгркдો рк╣ркдો ркПркЯрк▓ાркоાં ркмૂрко рк╕ંркнрк│ાркИ ркХે ‘ркЬે ркХોркИ рк░рк╕્ркдાркоાં рк╣ો ркдે ркиાрк╕ી ркЬркЬો, ркПркХ ркЧાંркбો рк╣ાркеી ркЖрк╡ે ркЫે!' ркЖркЬુркмાркЬુркоાંркеી ркмркзા ркиાрк╕ી ркЧркпા, рккркг рк╢િрк╖્ркп ркирк╣ીં! ркдેркгે рк╡િркЪાрк░્ркпું ркХે рк╣ાркеી рккркг ркиાрк░ાркпркг ркЫે, ркдો рккркЫી ркиાрк╕рк╡ું рк╢ા ркоાркЯે? ркПрко рк╡િркЪાрк░ીркиે ркдે ркКркнો рк░рк╣્ркпો; ркЕркиે ркиркорк╕્ркХાрк░ рк╡ркЧેрк░ે ркХрк░ીркиે рк╕્ркдુркдિ ркХрк░рк╡ા рк▓ાркЧ્ркпો. ркЖ ркмાркЬુ ркорк╣ાрк╡ркд ркЙрккрк░ркеી ркмૂркоો рккાркбી рк░рк╣્ркпો. ркЫે ркХે ‘ркнાркЧી ркЬાркУ, ркнાркЧી ркЬાркУ!' ркдોркп рк╢િрк╖્ркп рк╣ркХ્ркпો ркирк╣િ. ркЫેрк╡ркЯે рк╣ાркеી ркдેркиે рк╕ૂંрквркоાં рккркХркбી ркПркХ ркмાркЬુ рклેંркХી ркжркИркиે ркЪાрк▓્ркпો ркЧркпો. рк╢િрк╖્ркп рк▓ોрк╣ીрк▓ુрк╣ાркг ркЕркиે ркмેркнાрки ркеркИркиે рккркб્ркпો. рк░рк╣્ркпો.

ркЖ ркЦркмрк░ ркЖрк╢્рк░ркоркоાં рккрк╣ોંркЪркдાં ркЧુрк░ુ ркЕркиે рк╢િрк╖્ркпો ркдેркиે ркЙрккાркбીркиે ркЖрк╢્рк░ркоркоાં рк▓ркИ ркЖрк╡્ркпા, ркЕркиે рк╕ાрк░рк╡ાрк░ ркХрк░рк╡ા рк▓ાркЧ્ркпા. ркеોркбીрк╡ાрк░ે ркдેркиે ркнાрки ркЖрк╡્ркпું ркд્ркпાрк░ે ркХોркИркП ркдેркиે рккૂркЫ્ркпું: 'рк╣ાркеી ркЖрк╡ે ркЫે ркдે рк╕ાંркнрк│рк╡ા ркЫркдાં ркдркоે ркиાрк╕ી ркЧркпા ркирк╣િ?' ркдે ркмોрк▓્ркпો, 'ркЧુрк░ુркжેрк╡ે ркХрк╣્ркпું ркЫે ркХે ркиાрк░ાркпркг ркЬ ркоાркгрк╕, ркЬીрк╡, ркЬંркдુ, ркмркзું ркеркИ рк░рк╣ેрк▓ા ркЫે. ркПркЯрк▓ે рк╣ાркеી-ркиાрк░ાркпркгркиે ркЖрк╡ркдા ркжેркЦીркиે рк╣ું ркд્ркпાંркеી ркЦрк╕્ркпો ркирк╣િ.' ркд્ркпાрк░ે ркЧુрк░ુркП ркХрк╣્ркпું, 'ркмાрккુ, рк╣ાркеી-ркиાрк░ાркпркг ркЖрк╡ркдા рк╣ркдા ркП ркЦрк░ું, ркП рк╕ркд્ркп; рккркг ркорк╣ાрк╡ркд-ркиાрк░ાркпркгે ркдો ркиાрк╕ી ркЬрк╡ાркиું ркХрк╣્ркпું рк╣ркдું ркиે? ркЬો ркмркзાંркп ркиાрк░ાркпркг ркЫે ркдો рккркЫી ркдેркиું ркХрк╣ેрк╡ું ркХેрко рк╕ાંркнрк│્ркпું ркирк╣િ? ркорк╣ાрк╡ркд-ркиાрк░ાркпркгркиું рккркг рк╕ાંркнрк│рк╡ું ркЬોркИркП ркиે?' (рк╕ૌркиું рк╣ાрк╕્ркп)


‘рк╢ાрк╕્ркд્рк░ркоાં ркХрк╣ે ркЫે ркЖрккો ркиાрк░ાркпркг; ркЬрк│ ркиાрк░ાркпркгркиું рк╕્рк╡рк░ૂркк ркЫે! рккрк░ંркдુ ркХોркИркХ ркЬрк│ ркнркЧрк╡ાркиркиી рккૂркЬાркоાં ркЪાрк▓ે; ркдો ркХોркИркХ ркЬрк│ркеી рк╣ાрке-ркоોં ркзોрк╡ાркиું, рк╡ાрк╕ркг ркоાંркЬрк╡ાркиું, ркХрккркбાં ркзોрк╡ાркиું ркоાркд્рк░ ркЪાрк▓ે, рккркг рккીрк╡ાркоાં ркЕркерк╡ા ркаાркХોрк░ркЬીркиી рк╕ેрк╡ાркоાં рки ркЪાрк▓ે. ркдેрко рк╕ાркзુ, ркЕрк╕ાркзુ, ркнркХ્ркд ркЕркиે ркЕркнркХ્ркд - рк╕ૌркиા ркЕંркдрк░ркоાં ркиાрк░ાркпркг ркЫે, рккркг ркЕрк╕ાркзુ, ркЕркнркХ્ркд, ркжુрк╖્ркЯ ркоાркгрк╕ркиી рк╕ાркеે рк╡્ркпрк╡рк╣ાрк░ рк░ાркЦрк╡ો ркЪાрк▓ે ркирк╣િ. рк╣рк│рк╡ું ркорк│рк╡ું ркЪાрк▓ે ркирк╣િ. ркХોркИркХркиી рк╕ાркеે ркХેрк╡рк│ ркоોрквાркиી рк╡ાркдркЪીркдркиો ркЬ рк╡્ркпрк╡рк╣ાрк░ рккрк░рк╡ркбે; ркдો рк╡рк│ી ркХોркИркХркиી рк╕ાркеે ркП рккркг ркЪાрк▓ે ркирк╣િ. ркПрк╡ા ркоાркгрк╕ркеી ркжૂрк░ рк░рк╣ેрк╡ું ркЬોркИркП.'

~ рк╢્рк░ીрк░ાркоркХૃрк╖્ркг ркХркеાркоૃркдркоાંркеી

Let's Build Peter Pt. 1

Welcome!

In this article series, we are going to build a project management system (or an issue tracking system) called Peter. The tech stack we will use includes Express for the back end and React for the front end. Along the way, we will also use GraphQL. The database will be PostgreSQL.

Please install the following software before we proceed:

  1. Node v24+
  2. npm v11+
  3. PostgreSQL 17+
  4. Insomnia (or any API client)
  5. VS Code (or any text-editor)
  6.  Terminal (I guess you already have one!)

Take your time to install this software. Once you're ready, head over to the next article.

Saturday, February 7, 2026

The Great Man

Although, this quote is from The Will to Power, I copied it from cat-v.org website.

‘The Great Man … is colder, harder, less hesitating, and without respect and without the fear of “opinion”; he lacks the virtues that accompany respect and “respectability”, and altogether everything that is the “virtue of the herd”. If he cannot lead, he goes alone. … He knows he is incommunicable: he finds it tasteless to be familiar. … When not speaking to himself, he wears a mask. There is a solitude within him that is inaccessible to praise or blame.’

– Friedrich Nietzsche, The Will to Power

Friday, February 6, 2026

ркиાркХ рк╡ાркЯે рк╢્рк╡ાрк╕ рк▓ેрк╡ો

ркоркиુрк╖્ркпркиી ркЫાркдીркоાં ркЬે рклેрклрк╕ાં ркЫે ркдેркиું рк░ркХ્рк╖ркг ркХрк░ркиાрк░ાં ркиાркХા ркХે ркиાркХркиાં ркмે ркЫિркж્рк░ો ркЫે. рк╣рк╡ાркиે ркЦેંркЪીркиે ркдેркиે рк╢ુркж્ркз ркХрк░ીркиે ркдે рклેрклрк╕ાંркиે рккુрк░ી рккાркбрк╡ી ркП ркиાркХркиું ркХрк░્ркдрк╡્ркп ркЫે. рк╣рк╡ાркоાં ркЬે ркХાંркИ ркзૂрк│ ркХે ркЕркиિрк╖્ркЯ рк░ркЬркХркгો рк╣ોркп ркдે ркиાркХркиી ркЕંркжрк░ркиા рк╡ાрк│ркоાં ркнрк░ાркИ рк░рк╣ે ркЫે ркЕркиે ркдે ркЙрккрк░ાંркд ркиાркХркиી ркЙрк╖્ркгркдા рк╡ркбે рк╣рк╡ા рк╕્рк╡ркЪ્ркЫ ркеાркп ркЫે ркЕркиે рккркЫી ркЬ ркдે рклેрклрк╕ાંрк╕ુркзી рккрк╣ોંркЪે ркЫે. ркЧંркжી рк╣рк╡ાркоાં ркХે ркжુрк░્ркЧંркзрк╡ાрк│ે рк╕્ркерк│ે ркоાркгрк╕ ркЬркИ ркЪркбે ркЫે, ркд્ркпાрк░ે ркиાркХ рккોркдાркиી ркЧંркзркиિрк░ીркХ્рк╖ркХ рк╢ркХ્ркдિркеી ркоાркгрк╕ркиે ркЦркмрк░ ркЖрккે ркЫે ркХે ркЕрк╣ીં рклેрклрк╕ાંркиે ркЪોркЦ્ркЦી рк╣рк╡ા рккૂрк░ી рккાркбрк╡ાркиું ркХાрко ркХрк░рк╡ું ркоાрк░ે ркоાркЯે ркоુрк╢્ркХેрк▓ ркЫે...ркиાркХ ркП ркПркХ ркХોркорк│ ркЗંркж્рк░િркп ркЫે. ркХેркЯрк▓ાркХો рко્рк╣ોંрк╡ાркЯે рк╢્рк╡ાрк╕ рк▓ે ркЫે рккрк░рки્ркдુ ркдે ркиુркХрк╕ાркиркХાрк░ркХ ркЫે. ркХાрк░ркгркХે ркиાркХркж્рк╡ાрк░ા ркЬે рк╣рк╡ાрк╢ુркж્ркзિ ркеાркп ркЫે ркдે рко્рк╣ોંркж્рк╡ાрк░ા ркеркдી ркиркеી. рк╡рк│ી ркиાркХркиો ркоાрк░્ркЧ рклેрклрк╕ાંрк╕ુркзી рккрк╣ોંркЪрк╡ા ркоાркЯે рк▓ાંркмો ркЫે ркПркЯрк▓ે рк╣рк╡ાркиે рк╡ркзાрк░ે ркЙрк╖્ркгркдા ркорк│ે ркЫે ркЕркиે ркП рк░ીркдે рк╣рк╡ાрк╢ુркж્ркзિ рк╡િрк╢ેрк╖ ркеાркп ркЫે.