Projects for Web Systems

12/15/2023

Web Systems (EECS 485)

This course provided a comprehensive overview of modern web technologies across the front end, back end, and large-scale distributed systems. Through hands-on projects, I gained experience building full-stack applications and learned how to extract meaningful information from web-scale data. I developed and deployed complex systems, including a photo-sharing social media platform and a search engine, using industry-standard tools and frameworks.

Key Skills & Experience

This course strengthened my ability to independently learn and apply new web technologies by leveraging official documentation. I now feel confident in designing, building, and deploying scalable, full-stack web applications, as well as processing large-scale web data to extract insights and power search and recommendation features.


Projects

Project 1: Static Site Generator

In this project, I developed a non-interactive clone of Instagram by designing HTML templates using Jinja2 and static data rendering. The goal was to simulate a user-facing social media experience by designing multiple static pages that emulate the functionality and appearance of a photo-sharing platform like Instagram. The project emphasized template structure, content organization, and consistent styling across a multi-page site. Each page was generated using pre-defined JSON configurations with insta485generator, focusing on correct pluralization, user relationships, and content linking across the platform.

Key Contributions

This project solidified my frontend development skills, particularly in writing clean and reusable HTML templates for static content generation. It also gave me valuable experience in organizing dynamic data visually and semantically through a templating approach, laying a strong foundation for more advanced full-stack web development in later parts of the course.


Projects 2 & 3: Instagram Clone

Over a multi-phase project, I built a fully functional Instagram clone from the ground up, transitioning through static HTML templating, server-side dynamic pages, and a responsive client-side application powered by REST APIs. This project gave me end-to-end experience with full-stack web development, covering front-end rendering, backend logic, data persistence, authentication, and cloud deployment.

The final product replicated Instagram’s core features, including account creation, user authentication, uploading and deleting posts, following other users, liking and commenting on posts, and infinite scrolling. The site was deployed to AWS and supported real-time UI updates using JavaScript, without requiring full page reloads.

Key Contributions

This project strengthened my ability to design and build scalable, user-focused web applications from the ground up. I developed a deep understanding of frontend/backend integration, REST API architecture, database design, session management, and deploying real-world systems in the cloud. The layered, iterative approach to development gave me practical experience transitioning from basic templating to a modern, fully interactive client-server web platform.


Project 4: MapReduce

Developed a fully functioning MapReduce system from scratch using Python, supporting fault-tolerant distributed computation with multiple concurrent Worker processes and a central Manager. This project emphasized low-level systems programming concepts including TCP/UDP networking, multithreading, heartbeat-based fault detection, and dynamic task orchestration across remote processes. The system could accept new job requests (including user-defined mapper and reducer executables), manage multiple concurrent workers, handle worker registration and heartbeat monitoring, and execute full MapReduce jobs across dynamic worker pools. The design included graceful shutdown, robust failure recovery, and out-of-core data handling through Unix streaming. Deployed to AWS for distributed testing and performance validation.

Key Contributions

This project deepened my knowledge of systems-level programming and gave me hands-on experience building a resilient distributed computation framework. I gained fluency in thread-safe design, concurrent programming patterns, and distributed fault-tolerance strategies, all while managing low-level network communication and process lifecycle control. The final implementation reliably executed large-scale MapReduce tasks in the cloud, even under unreliable network or node conditions.


Project 5: Search Engine

Built a scalable search engine by constructing an inverted index through a pipeline of MapReduce jobs using Python scripts compatible with the Hadoop Streaming Interface. Leveraged Michigan Hadoop (Madoop) to execute multiple MapReduce stages on a large subset of Wikipedia documents focused on Michigan and technology topics. The final inverted index output contains term-level statistics including inverse document frequency, term frequency, and document normalization factors, segmented into multiple partitioned files for distributed serving. The system supports efficient querying by integrating PageRank scores with tf-idf similarity for ranking results. An Index server REST API loads segments of the inverted index and PageRank data to serve JSON-formatted search results, while a Search server aggregates results from multiple Index servers, exposing a user-friendly web interface. The entire system was deployed on AWS for cloud scalability and performance testing.

Key Contributions

This project provided comprehensive experience in large-scale data processing, distributed system design, and search engine architecture. I gained hands-on skills building robust MapReduce pipelines, RESTful microservices, and multi-threaded query aggregators, culminating in a deployable cloud-based search engine integrating classical information retrieval techniques and link analysis scores.