🧑💻 Internship Project — Submitted to Inscripts Flexcel is an Excel-like spreadsheet web application built using React and Tailwind CSS.
This project was developed as part of the React Intern Assignment provided by Inscripts.
The main goal of this project is to create a static, front-end-only prototype that replicates the design and core experience of Excel or Google Sheets, as per the Figma design shared in the React Intern Assignment. The goal is to match both visual fidelity and user experience (UX) of real spreadsheet applications.
Flexcel is a custom-built spreadsheet web interface designed to mimic the functionality and appearance of Microsoft Excel. It allows users to edit data directly, navigate cells using keyboard arrows, sort data by columns, and even hide columns, offering a seamless and intuitive spreadsheet experience.
The design was closely followed using the provided Figma design and implemented with a modern React + Tailwind + TypeScript stack.
- Understand the Figma UI design and break it into reusable UI components (Table, Header, Buttons, Tabs, Inputs).
- Build the layout to exactly match the pixel-perfect Figma frame using Tailwind CSS.
- Use
@tanstack/react-tableto create a dynamic table with support for:- Column sorting
- Cell rendering
- Row model generation
- Create editable cells using local state per cell.
- Implement keyboard navigation with arrow keys (stretch goal).
- Add column hide/unhide feature using
visibilitystate. - Add mock data to simulate a real spreadsheet scenario.
- Handle component state, click handlers, and conditional styles using
clsxand utility hooks.
| Technology | Purpose |
|---|---|
| React 19 | UI rendering and component architecture |
| TypeScript | Static typing and IntelliSense |
| Tailwind CSS | Utility-first styling |
| react-table | Table generation and row/column logic |
| Vite | Lightning-fast React bundler |
| clsx | Conditional class name utility |
| Vercel | Deployment platform |
flexcel/
├── public/
│ └── favicon.png
├── src/
│ ├── assets/ # Icons, images, etc.
│ ├── components/ # Reusable components
│ │ ├── Common/ # Folder contains shared, reusable UI elements that are used across multiple parts of the application
│ │ ├── Header/ # Folder contains all the UI components responsible for rendering the top section (or header bar) of the Flexcel app.
│ │ ├── Icons/ # Reusable Icons components using Svgs
│ │ ├── Layout/ # Folder contains reusable layout-related components that define how your app is visually structured on the page.
│ │ ├── Table/ # Folder contains all components and logic required to build the Excel-like spreadsheet grid in the Flexcel app.
| | | ├── column.tsx # Defines column groups, headers, and cells for the spreadsheet table.
| | | ├── DeafultHeader.tsx # Defines spreadsheet table columns, headers, and custom cell rendering logic.
| | | ├── NewTable.tsx. # Renders spreadsheet table with editing, sorting, resizing, and keyboard navigation.
| | | └── TableCell.tsx # Handles editable spreadsheet cell rendering, focus, and active selection logic.
│ │ └── Ui/ # Ui Components
│ ├── context/ # Column visibility context
│ ├── pages/ # All Pages of this web App
│ ├── routes/ # Creating Page Rotes of app
│ ├── hooks/ # Custom hooks (editable cell)
│ ├── data/ # Mock spreadsheet data
│ ├── utils/ # common ts function
│ ├── types/ # Type definitions
│ ├── App.tsx
│ ├── main.tsx
│ └── index.css
├── .eslintrc.js
├── tsconfig.json
├── tailwind.config.js
├── vite.config.ts
└── README.md
This folder defines the spreadsheet functionality and layout in the Flexcel app. It includes column definitions, interactive cells, editable behavior, and the full table rendering logic using @tanstack/react-table.
- Purpose: Central configuration for the spreadsheet's columns.
- What It Does: Defines column groups, headers with icons, cell renderers, styles, and sorting logic.
- Usage: Passed to
react-tableinNewTable.tsxto structure the grid.
- Purpose: Custom header component for rendering column headers.
- What It Does: Renders header content and a resizable grip for column resizing.
- Usage: Used in
NewTable.tsxinside the<thead>to render all headers.
- Purpose: The main table component that renders the full spreadsheet.
- What It Does: Sets up
react-tableinstance, handles keyboard navigation, and connects header, body, and resizing. - Usage: Can be imported and rendered inside the main application view or
pages/.
- Purpose: Handles individual spreadsheet cell rendering and editing.
- What It Does: Enables inline cell editing, highlights active cell, syncs updates to state.
- Usage: Rendered in every row of
NewTable.tsxusingtable.getRowModel().
These files together make up the core logic for a fully interactive, Excel-like table experience, including:
- Column grouping and nested headers
- Keyboard navigation with arrow keys
- Inline cell editing
- Resizable columns
- Responsive styling with Tailwind CSS
This section outlines the step-by-step approach I followed to develop the Flexcel spreadsheet UI, based on the intern assignment provided by Inscripts.
- Carefully reviewed the Figma design to understand layout, spacing, font styles, and pixel details.
- Identified UI patterns and broke the design into modular components (header, table, toolbar, etc.).
- Studied the interaction requirements like sorting, editing, column visibility, and keyboard navigation.
-
Created a scalable folder structure using separation of concerns:
-
Decided on
react-tablefor table logic and Tailwind CSS for styling, with custom logic where needed.
- Initialized the project using Vite + React 18 + TypeScript.
- Installed required libraries:
@tanstack/react-table,clsx,tailwind,eslint, andprettier. - Enabled strict typing in
tsconfig.jsonfor reliable type safety. - Set up Tailwind config with custom colors for design accuracy.
-
Built reusable components:
Button,Input,StatusBadge,Iconinsidecommon/TabNavigation,ToolbarButtonsinHeader/TableCell,EditableCell, andcolumns.tsxinsideTable/
-
Ensured each component closely matched the Figma design using Tailwind spacing, color, and typography classes.
-
Used
react-tableto:- Define grouped columns in
columns.tsx - Enable sorting, column visibility toggling, and header rendering
- Define grouped columns in
-
Added keyboard navigation using arrow keys inside a custom hook.
-
Enabled cell editing with in-place inputs using controlled state.
- Verified every component and layout against Figma using browser DevTools and exact measurements.
- Applied responsive design techniques using Tailwind utilities (
flex,gap,truncate,overflow-hidden, etc.). - Used
clsxfor conditional styling (e.g., cell highlight, priority color coding).
- Ran
npm run type-checkto validate all TypeScript typings. - Used ESLint + Prettier for consistent formatting and linting.
- Verified component props, hooks, and context usage were all well-typed and reusable.
- Pushed project to GitHub.
- Connected the GitHub repo to Vercel for instant deployment.
- Configured
vercel.jsonif needed to handle single-page app routing. - Final deployed link: https://flexcel.vercel.app
| Phase | Focus |
|---|---|
| 📘 Analysis | Broke design into components |
| 🗂 Structure | Created a clean, modular codebase |
| ⚙️ Setup | Tooling, linting, and TypeScript enabled |
| 🧩 UI | Reusable, pixel-perfect, responsive components |
| 🧠 Logic | react-table, editable cells, keyboard nav |
| 🧼 Polish | Match Figma 1:1, maintain clean commit history |
| 🚀 Delivery | Deployed live app on Vercel |
# Step 1: Clone the repo
git clone https://github.com/akshitha143/Inscripts-task.git
cd Inscripts-task
# Step 2: Install dependencies
npm install
# Step 3: Start dev server
npm run dev
# Step 4: Linting and type check
npm run lint
npm run type-checkThe UI closely mirrors the Figma design. Everything from spacing to typography and grid alignment has been meticulously matched.
Users can click on any data cell to edit its value directly, mimicking the natural editing behavior of Excel.
Clicking on column headers allows sorting the column values in descending order.
Users can toggle the visibility of specific columns dynamically, improving data focus.
Users can move between cells using the arrow keys (↑ ↓ ← →) just like in Excel — improving speed and UX.
Tailwind CSS was used to make the layout modular and responsive across screen sizes.
Interactive UI elements such as top tabs and toolbar buttons have state changes or log to console, ensuring no dead UI components.
All components are typed, strict mode enabled, and built for maximum maintainability and scalability.
Flexcel is a fully functional and beautiful spreadsheet interface clone, created as part of an intern assignment. It demonstrates strong React fundamentals, design implementation, and interactivity handling. It provides a delightful Excel-like user experience using modern web technologies.
This project was developed as part of the Frontend Intern Assignment at Inscripts.
💙 Thank you to the team at Inscripts for giving me this opportunity to demonstrate my skills in UI development and React. It was a great learning experience to build a pixel-perfect, Excel-like interface and apply advanced table rendering techniques.
Looking forward to more such exciting challenges!