This repository contains two test tasks completed for a Strong Junior Front-End Developer position.
- Project Overview
- Technologies Used
- Installation
- Task 1: Interactive Workspace
- Task 2: WebSocket-based Bitcoin Transactions
- Code Style Guide
This repository contains two separate projects:
- Interactive Workspace – A grid-based drag-and-resize UI for blocks.
- WebSocket-based Bitcoin Transactions – A real-time Bitcoin transaction tracker.
Each project is structured as a separate module with its own logic and dependencies.
- React
- TypeScript
- Redux Toolkit
- Tailwind CSS
- WebSockets (Blockchain API for real-time transactions)
- Local Storage (for state persistence in Task 1)
To run the projects locally, follow these steps:
- Clone the repository:
git clone https://github.com/danilfomchik/dotcode-test-task
- Navigate to the project directory:
cd dotcode-test-task - Install dependencies:
npm install
- Start the development server:
npm run dev
- Draggable and resizable blocks: Five blocks can be moved and resized on a grid-based layout (10px increments).
- Z-index control: Clicking a block moves it to the front.
- Delete functionality: Users can remove a block.
- Reset functionality: A "Reset" button restores the initial state.
- Persistent state: Layout is saved and restored after page refresh.
- React with TypeScript for strict typing.
- Redux for state management.
- Local Storage for persistence.
- React Draggable and Resizable components for interactivity using react-rnd.
- Real-time transaction updates using Blockchain WebSocket API.
- Live transaction list displaying incoming Bitcoin transactions.
- Total received transactions sum calculation.
- Controls:
- "Start" button subscribes to transaction updates.
- "Stop" button unsubscribes but keeps the current list.
- "Reset" button clears the list and resets the total.
- WebSockets for real-time data streaming.
- React and Redux for UI updates and state management.
- Efficient data handling with React useEffect and WebSocket event listeners.
- Optimized rendering using memoization.
This project follows modern front-end best practices:
- Consistent formatting using Prettier.
- ESLint enforced rules to maintain clean code.
- TypeScript strict mode enabled to ensure type safety.
- Components:
PascalCase(e.g.,TransactionList.tsx). - Functions and variables:
camelCase(e.g.,fetchBitcoinData). - Constants:
UPPER_CASE_SNAKE_CASE(e.g.,API_URL).
/src
/components # Reusable UI components
/pages # Page-level components
/store # Redux store and slices
/utils # Helper functions
/hooks # Custom React hooks
- Use functional components and hooks.
- Avoid unnecessary re-renders (React.memo, useCallback, useMemo).
- Ensure accessibility (ARIA attributes, semantic HTML).
Fomenko Daniil – Front-End Developer
If you have any questions, feel free to reach out!