Demo video: https://youtu.be/rBc-QGZwgxE
Technical Details (for employers)
*** Contact berk[[dot]]ozkan[[at]]ug[[dot]]bilkent[[dot]]edu[[dot]]tr for demo with working api keys ***
Welcome to TopraTek! This project aims to provide a comprehensive mapping solution tailored specifically for farmers. With this application, farmers can easily outline their land, label it, categorize locations, and record additional data such as current crop and crop planting history. Whether you're a small-scale farmer or managing large agricultural operations, this tool is designed to streamline your mapping and data recording processes.
- Easily outline and define the boundaries of your land using intuitive drawing tools.
![Screenshot 2024-01-27 at 10 06 56](https://private-user-images.githubusercontent.com/82842011/300172524-f9f77b20-4935-409e-b976-e0eac63e46a5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQyNDY3OTUsIm5iZiI6MTcyNDI0NjQ5NSwicGF0aCI6Ii84Mjg0MjAxMS8zMDAxNzI1MjQtZjlmNzdiMjAtNDkzNS00MDllLWI5NzYtZTBlYWM2M2U0NmE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIxVDEzMjEzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTlmMDRmYTFiYjY2MTVjMWIxMTZmNWY0YjFjNWIzNzU4ZTgwNTMxZGFhZGM4NzQ0MzMzNmEwMjY2MjdjODQ4MmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.jbHRBIngrFxmKz4lrbrMgU69NPsYmZugCZMxbp3Frmc)
- Precisely mark specific areas, fields, or plots for detailed management.
![Screenshot 2024-01-27 at 10 09 19](https://private-user-images.githubusercontent.com/82842011/300172558-5b440baa-8155-497d-bcad-1d8193eb7dd3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQyNDY3OTUsIm5iZiI6MTcyNDI0NjQ5NSwicGF0aCI6Ii84Mjg0MjAxMS8zMDAxNzI1NTgtNWI0NDBiYWEtODE1NS00OTdkLWJjYWQtMWQ4MTkzZWI3ZGQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIxVDEzMjEzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMyYTJjNjI3Mzc4MjE2NGIzNTMxM2JlNDAxYzVlMzBiYjc0ZDJmYmFmYTgxODk5ODkxMmQ3N2ViMmJkMGU4N2QmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.7wDxn7iqko-NJ_4qdtGembPjvnlNwXF8m3bhr-nFJG0)
- Edit changes later
![Screenshot 2024-01-27 at 10 20 16](https://private-user-images.githubusercontent.com/82842011/300172570-cd5e71ba-7e47-40d6-846a-5e06af02239b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQyNDY3OTUsIm5iZiI6MTcyNDI0NjQ5NSwicGF0aCI6Ii84Mjg0MjAxMS8zMDAxNzI1NzAtY2Q1ZTcxYmEtN2U0Ny00MGQ2LTg0NmEtNWUwNmFmMDIyMzliLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIxVDEzMjEzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE5OGZhMDM1MGUzNmU4MTYyYzY5NmFiODk4ZWU4NWFhMjEwYTUwMzQxZTUyMjczOWE5N2IwNmRjN2I2YzMwMDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.nroB4x2Mx5cGSL6jcxFxnnbxh3U4_62ip-IRqDKryh4)
- Add labels to different areas of your land to identify specific features such as crops, buildings, water sources, etc.
- Categorize locations based on various attributes like soil type, terrain features, irrigation methods, etc.
- Record and track information about the current crop planted in each area of your land.
- Maintain a history of crop rotations and planting schedules for better crop management practices.
- Visualize your land and all associated data on an interactive map for easy reference and analysis.
- Gain insights into your farming operations by overlaying different layers of information.
@@ This won't work since I removed API and DB Keys @@
To get started with TopraTek, follow these steps:
- Pull repo
- Navigate to TopraTek folder
cd TopraTek (or TopraTekv3)
cd src
- Install dependencies
npm install
- Run
npm run start
- Go to localhost:3000/login on your browser and use.
Implemented:
- Authentication via tokens
- Routing
- Frontend-backend communication (MVC)
- backend-database communication (MVC)
- Frontend-Mapbox API communication
- Serverside rendering with PUG and Node JS
- Dynamic component rendering with fetch await promises
- Drawing shapes on the map
- OOP for user structure in MongoDB
- Unit tests
-
Utilization of UML for Project Design and Planning: I used Unified Modeling Language (UML) to plan and design this project. This involved creating diagrams to visualize the project's structure, how they relate to each other, and what they do. Using UML helped me organize the project in a clear and structured way, showing my ability to plan software projects thoughtfully.
-
Embracing Vanilla JavaScript: I deliberately chose to use vanilla JavaScript and Node JS for this project. Instead of relying on frameworks or libraries, I wanted to understand how JavaScript and frontend-backend interactions work from the ground up. This hands-on approach allowed me to dive into core concepts, learning their details and best practices thoroughly. By doing so, I'm better equipped to handle various challenges in web development and beyond.
** Personal anecdote ** When developing this project I ran into a performance problem. I wanted to update features, such as the sidebar and map live when a user added a location, however, since PUG is a serverside template engine each change required a complete reload of the page. Then, I discovered HTMX, which helped me make some parts dynamic without reloading the page–greatly increasing performance. However, some feature updates required a more tailored approach (or I didn't know htmx well enough), so this led me to do routing and updating manually with vanilla JS fetch and awaits on the frontend. And so, I was able to benefit from the superior performance of server-side rendering while keeping the site dynamic.
In summary, this project reflects my commitment to learning and mastering software development techniques. It demonstrates my ability to plan projects systematically.
- Node JS v21.2.0
- PUG (formerly jade)
- HTML/CSS/JS
- Mapbox
- Express
- MongoDB
![usecaseTT](https://private-user-images.githubusercontent.com/82842011/300173858-d7f58ad4-1e58-4f66-8a9e-da07e3af23c8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQyNDY3OTUsIm5iZiI6MTcyNDI0NjQ5NSwicGF0aCI6Ii84Mjg0MjAxMS8zMDAxNzM4NTgtZDdmNThhZDQtMWU1OC00ZjY2LThhOWUtZGEwN2UzYWYyM2M4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIxVDEzMjEzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThmNDhkNjkyZDM2YWExNDdlMTA5NmJjNzQ3ZGUzNWI0YzIwYWNkZDYyODQxOWU2NGVhOWI0ZGUzZGU5YWU5ZTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Fm0J-mOSOeD11KplR0hLVJc8BIpBqkb5dEhRKX0dKDs)
![sqncTT](https://private-user-images.githubusercontent.com/82842011/300173872-aca1e99e-bee6-4880-b72b-82b46c0a6ebf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQyNDY3OTUsIm5iZiI6MTcyNDI0NjQ5NSwicGF0aCI6Ii84Mjg0MjAxMS8zMDAxNzM4NzItYWNhMWU5OWUtYmVlNi00ODgwLWI3MmItODJiNDZjMGE2ZWJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIxVDEzMjEzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFiMDRjYTgzNWUwMTE0M2MxZGFhZWE2ZTMyNzkyMjhhZWNjMTAxMzgyNWRlMjYwMzQ5MDgyOTYyMGNhMmM4MmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.-oP6DF4UcvVNooSeZOtPneZwY1W2fcVq351IYCLsW2s)
I didn't add (due to time constraints):
- Error indicators
- Editing geometric shapes on the map
- Weather data with OpenWeatherAPI
- Full-screen mode
- View settings
- Navigation on map
- Some details
- Could spend more time on input-checking