Cuttr – Connect, Share & Trade Plants

A mobile app built from scratch using a React Native & expo front end, an ASP.NET Core API, a SQL Server database, and Azure deployment.

Cuttr App Logo

Cuttr: Connecting Plant Lovers (Like Me!)

Cuttr is my way of bringing plant enthusiasts together. I built it so users can easily trade plants or cuttings, chat with each other, and help each other to diversify their plant collection with the most interesting plants. It’s my first big project that ties together a mobile app and a backend.

Connection Screen
Chat Screen
Trade Proposal Screen

A Simple and Fun Mobile Experience

My mobile app is designed to be intuitive, I'm continually trying to fine-tune the user experience. It lets you:

In the future I’m also looking to include a social media aspect where people can further interact with each other, share their knowledge, or just show off their proudest pieces.

Swipe Interface
Set Filters
Profile Screen
Plant Gallery 1
Plant Gallery 2

Frontend Architecture & Tools

My app’s frontend is built with React Native using the Expo framework. I chose a feature‑based folder structure to keep my code modular and organized. This helps me add new features while ensuring a clean and structured architecture.

Folder Structure Example

CUTTRAPP/
└── MyCuttrApp/
    ├── app/
    │   ├── api/              // API services (authService, axiosConfig, etc.)
    │   ├── components/       // Reusable UI components (e.g. TextInputField, ErrorMessage)
    │   ├── features/         // Feature-specific code:
    │   │   ├── auth/         // Authentication screens, store, and styles
    │   │   ├── main/         // Main features: chat, swipe, profile, trade proposals, main-app components etc.
    │   │   └── onboarding/   // Onboarding screens for new users
    │   ├── i18n/             // Internationalization setup and locale files
    │   ├── navigation/       // Navigation configuration (AuthNavigator, MainTabNavigator, etc.)
    │   ├── store/            // Redux store setup, slices, and middleware
    │   ├── theme/            // Theme constants and styles
    │   ├── types/            // Type definitions and enums
    │   └── utils/            // Utility functions (logger, secure storage, etc.)
    ├── app.config.js
    ├── babel.config.js
    ├── tsconfig.json
    └── package.json
    

Code Architecture Overview

In summary, my app uses Redux Toolkit to manage authentication state with async thunks, while secure storage keeps tokens safe. React Query makes data fetching easy, and Axios ensures all HTTP requests include the correct auth headers. Together with i18next for translations, this architecture helps keep the code organized and scalable.

Backend Architecture & Organized Code for a Growing App

I built the backend using a layered architecture in ASP.NET Core (.NET 8), dividing responsibilities into three main parts:

This modular, organized approach keeps the code maintainable and scalable as I continue adding new features. The diagram below shows the overall layered architecture along with the inner structure of the project.

%%{init: {'theme': 'default', 'themeVariables': { 'fontSize': '25px' }}}%% flowchart LR Client[Client] A[Cuttr.Api
Controllers & Middleware] B[Cuttr.Business
Contracts, Managers & Utilities] C[Cuttr.Infrastructure
Repositories & EF Entities] D[(Database)] Client -- "Sends Request" --> A A -- "Forwards to" --> B B -- "Accesses" --> C C -- "Queries" --> D D -- "Returns Data" --> C C -- "Returns Data" --> B B -- "Processes Response" --> A A -- "Sends Response" --> Client

API: The Heart of Cuttr

My API has endpoints for all the main features:

  • User Authentication: Login, logout, and token refreshing.
  • Plant Management: Add, update, get, and delete plants.
  • Swipes & Matches: Record swipes and handle matching.
  • Messaging: Chat with connections.
  • Trade Proposals & Reports: Propose trades and report issues.

Each controller (like AuthController, PlantController, etc.) comes with error handling and each endpoint needs authorization with a valid JWT token by default.

AuthController.cs snippet
Swagger UI Screenshot

Data Storage with SQL Server & Geospatial Support

I use SQL Server for data storage, connecting it with Entity Framework Core. I integrated NetTopologySuite to perform geospatial queries—this is key for features like finding nearby plants. I’m using migrations to keep the database schema in sync as I fine-tune the database through experience and adding new features.

SQL Server Schema Diagram

Keeping Things Secure and Reliable

Security was a big priority for me, even though I’m just starting out:

These measures help ensure that users’ data stays safe while giving me valuable experience in implementing security best practices.

JwtTokenGenerator.cs snippet

Taking It to the Cloud on Azure

I deployed Cuttr on Azure to ensure it’s available and scalable. The key components are:

Azure Portal Screenshot
GitHub Actions YAML snippet/diagram

Cuttr – My First Big Step as a Developer

Cuttr is my journey into full stack development—combining a mobile app with a custom-built API and cloud infrastructure. I’m proud of what I’ve built so far, and I’m excited to keep learning and iterating.

Right now I am fine-tuning the existing features and UI/UX design. The next step is getting my app ready for deployment on the actual app stores. After this, I’m excited to start building a social media expansion where users can further interact, share their experiences, and show off their coolest looking plants.

If you’re interested in trying it out, checking out the code, or even collaborating, let’s connect!