Inspiration
As a team, we observed the efficiency of futures markets around the world, and wondered if this sort of efficiency could be easily brought at a smaller scale, to allow for lower overhead, more community outreach, and connecting those who most need the financial benefits to the cost-cutting associated with these measures. We designed a user interface that could serve as an example for how to allow local community members to request limit quantities of common staple foods in a manner that provides both stability to the agricultural producers of the community, while ensuring stability for those families relying on the products.
What it does
The application provides users with a convenient interface through which they can select the products they are interested in, indicate the desired quantity, and preview the likely price of the contract before submitting it, while maintaining an architecture hospitable to slowly changing prices that allow for some latency between the client and server with minimal effect on the outcomes or timing. Additionally, it provides a model interface through which production of the required goods could be coordinated, allowing agricultural industry to more precisely meet the needs of the communities they serve, while both increasing their efficiency, and minimizing the waste of their products.
How we built it
The application was built on top of Node.js using the Express.js web framework, with a sqlite database. The usage of sqlite allowed for a rapid development paradigm, while simultaneously demonstrating the usage of database technologies that could be more easily scaled to production in cases with many users. Using basic HTML, CSS, and JS allowed us to create an application that almost any user connected to the internet could access, regardless of their underlying operating system or hardware constraints, so long as they can access a semi-modern web browser. Lily did the vast majority of the software development, Yousuf and Matt collected relevant statistics and drove feedback on the application, and Juwairiyyah led with creating necessary art, as well as recommending UI layouts.
Challenges we ran into
Maintaining state in the database, while supporting multiple clients simultaneously, created an interesting challenge that we were able to successfully navigate. Initially, there was some concern as to whether a server that we built within the limited time frame of the event would be capable of handling even a handful of connections as a proof of concept, but with well formatted query strategies and callbacks, this issue proved to be easily mitigable. The current architecture allows for multiple viewers and editors simultaneously of both order input, as well as production output and orchestration services. While we were concerned about how a traditional web UI might reflect on the extensibility of the production output, we discovered that using a RESTful API allowed us to both create a simple web interface, while also guaranteeing future compatibility with a diverse array of possible applications or automation solutions.
Accomplishments that we're proud of
While this server can manage several clients simultaneously, it also can run on any mainstream operating system with the included scripts. This minimizes potential challenges in deployment, and demonstrates the flexibility of such a solution in both its target users and production environment. The server was successfully tested across both Window, MacOS, and Linux. Deployment remained relatively consistent across platforms, with the only differences in configuration being alternative database configuration scripts for windows machines and UNIX-like operating systems. The choice to utilize separate scripts, instead of a more transparent solution to the deploying entity was made in the furtherance of portability and standardization across the core Node.js environment.
What we learned
Through building this application, we learned about the portability of web technology for application usage, as well as the utility of using cross-platform runtimes to allow the same code to be run across a variety of differing platforms with little to no direct modification by the developer to facilitate this. Additionally, we learned about the importance of asynchronous networking and function calls to enable the creation of multi-user systems that can handle many users at once without any notable degradation in performance. Finally, we learned about the utility of database systems, particularly the portability of SQL that makes it possible to write one set of database queries, and execute them not only on the current system, but also to enable the upgrade of the system to a database that can more proficiently handle large amounts of concurrency if necessary.
What's next for Farming for the Future
Our team is excited for the future opportunities that this software, its associated architecture, and novel approach to smaller farms could bring to consumers, and agricultural business alike. Further prototyping could reveal the necessary tradeoffs and architectural choices necessary to truly scale this technology to the demands of global communities, increasing database concurrency, increasing practical capacity for simultaneous users, and eventually could create an opportunity for agricultural businesses, particularly those small enough to currently be overlooked, to better serve the needs of their communities, while promoting their own growth and efficiency, and facilitating the changes necessary to feed the increasing global population and their diets. Current regulatory environments may limit the immediate applications of this system, however opening conversations around these modernization initiatives could very well prove an important part in the modernization of agriculture.
Log in or sign up for Devpost to join the conversation.