Level Up Your Portfolio: 5 TypeScript Projects That Will Impress Employers

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Why TypeScript is Your Ace in the Hole for Your Portfolio?

\n\n

The world of JavaScript is the Wild West. Dynamic typing grants freedom but often turns code into a game of roulette. TypeScript arrives like a sheriff who restores order. If you want not just to write code, but to build reliable, scalable systems — TypeScript projects in your portfolio will speak volumes for you.

\n\n

Imagine: you go to an interview. Everyone has standard React TODO lists. But you have a fully-typed Telegram bot with authorization, a real-time chat, or your own tiny compiler. You'll agree, it sounds more impressive. In this article, we'll break down 5 ideas for a TypeScript portfolio that will not only boost your skills but also make recruiters linger on your GitHub.

\n\n

Selection Criteria: What Makes a Project "Top-Notch"?

\n\n

Before diving into code, let's agree. A good TypeScript pet project should:

\n
    \n
  • Solve a real problem (or at least simulate it).
  • \n
  • Use advanced TS features: generics, decorators, utility types.
  • \n
  • Have tests — code coverage shows your responsibility.
  • \n
  • Be documented — a README with installation and usage examples.
  • \n
\n\n

Ready? Let's go!

\n\n

1. Telegram Bot for Finance Management with Full Typing

\n\n

Bots are classics. But making a bot with TypeScript and proper architecture is already a challenge. We won't just hang a handler on "Hello," but build a microservice with DI containers and strict models.

\n\n

What's Inside?

\n
    \n
  • Database (SQLite or PostgreSQL) with TypeORM.
  • \n
  • Commands: /add_expense, /stats, /budget.
  • \n
  • Expense categories via enum.
  • \n
\n\n

Code Example: Typed Model and Command

\n\n
// models/Expense.ts\nimport { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn } from 'typeorm';\nimport { Category } from './enums';\n\n@Entity()\nexport class Expense {\n    @PrimaryGeneratedColumn()\n    id!: number;\n\n    @Column()\n    userId!: number;\n\n    @Column('decimal', { precision: 10, scale: 2 })\n    amount!: number;\n\n    @Column({\n        type: 'enum',\n        enum: Category,\n        default: Category.OTHER\n    })\n    category!: Category;\n\n    @CreateDateColumn()\n    createdAt!: Date;\n}\n\n// commands/addExpense.ts\nimport { Context } from 'telegraf';\nimport { getRepository } from 'typeorm';\nimport { Expense } from '../models/Expense';\nimport { Category } from '../models/enums';\n\nexport async function addExpense(ctx: Context, amount: number, category: Category) {\n    const repo = getRepository(Expense);\n    const expense = repo.create({\n        userId: ctx.from!.id,\n        amount,\n        category\n    });\n    await repo.save(expense);\n    await ctx.reply(`✅ Added: ${amount} RUB in category ${category}`);\n}\n
\n\n

Why is this cool? You demonstrate the ability to work with a database via ORM, understanding of asynchrony, and strict data typing. Plus, it's a real-world use case.

\n\n

2. Real-time Task Board (Kanban) on WebSocket + React

\n\n

Making a TODO list is boring. Making a multi-user Kanban with drag-and-drop and WebSocket in TypeScript is already interesting. Here you reveal yourself as a fullstack developer.

\n\n

Architecture

\n
    \n
  • Backend: Express + Socket.io + TypeScript.
  • \n
  • Frontend: React + react-beautiful-dnd + Redux Toolkit.
  • \n
  • Typing all events (socket events as union types).
  • \n
\n\n

Example: Typed WebSocket Handler

\n\n
// types/socket-events.ts\nexport interface ServerToClientEvents {\n    taskMoved: (task: Task, fromColumn: ColumnId, toColumn: ColumnId) => void;\n    newTask: (task: Task) => void;\n}\n                

Blogs

Book Recommendations