As a Computer Science student at Michigan State, my motivation for creating Sparxley comes from being lost in the ocean of information we have to manage as students. We have to deal with our assignments from D2L, long lecture notes in PDF format, and having a very busy calendar. We set out to create a "Jarvis-like" assistant that could provide answers to general question as well as D2L specific questions that users may have

What it does

Sparxley serves as an AIO assistant that connects the world of general AI with everyday life of a student. academic hub- logging into MSU D2L through a web browser within the app to obtain data such as course lists, assignments and grades. Document intelligence- importing course related documents (syllabi and notes) into the app so that Sparxley can provide responses based upon those documents. voice-first interaction- using local system voice and high-fidelity ElevenLabs speech synthesis for spoken responses. location awareness- provides assistance with the user's current geographic position in/near East Lansing. dual personality- has a "roast mode" (triggered by "flame on") which enables a playful/sarcastic response style.

How we built it

Backend: Built with Flask (Python) to manage model routing and local data.

Frontend: A responsive web interface with real-time audio streaming.

Intelligence: Integrated OpenRouter (Gemini 2.0 Flash) and OpenAI for natural language processing.

Automation: Used Selenium to handle the complexities of MSU’s OKTA 2FA login for D2L data extraction.

Speech: Leveraged pyttsx3 for local TTS and ElevenLabs for cloud-based, high-quality voice generation.

Challenges we ran into

2FA and Scraping: MSU’s D2L login is heavily protected. Building a Selenium-based "browser session" that allows for manual 2FA while programmatically extracting course data was a major technical hurdle.

State Management: Keeping the AI "aware" of the user's courses across different Flask requests required managing global session dictionaries and ensuring data didn't clear on server restarts.

Audio Hardware Locks: Managing local audio drivers for text-to-speech while using the Flask reloader often caused the server to crash due to resource locking.

Accomplishments that we're proud of

Integrated D2L Accounts Successfully: For the assistant to "read" your D2L dashboard and relay your upcoming assignments in natural language. "Roast Mode" Logic - Creating a system prompt that will allow the assistant to switch from a traditional professional assistant to a savage comedic style without losing continuity of context between the two. Clean Code Architecture will be used to organize this multi-faceted project (i.e. Voice, automation, web, and AI) into modular pieces.

What we learned

The fragile nature of web scraping made evident how much work it takes to manage errors due to the constant small changes in the D2L (Desire2Learn) website causing past CSS selectors to no longer work.

Concurrency management within the Python programming language has taught me about the concepts of thread safety and process management.

It's very interesting to learn that when developing a user interface (UI) for an AI program the amount of time it takes to generate text through a static creation process and the amount of time to play that audio back can affect whether the user finds their interaction with the AI to be responsive.

What's next for Sparxley AI

Sparxley is as valuable as its understanding of the world. Therefore, we are potentially moving toward a long-term memory architecture.

Vector Memory: By including a database like ChromaDB or Pinecone, Sparxley can recall conversations you had three months ago. If you told Sparxley in September that you were struggling with a particular coding concept, it could help remind you of that struggle the next time you begin work on a related project in the spring.

Social Integration: Allowing Sparxley to work with your roommates, Rithvik and Viram, to schedule household errands or shared project due dates.

Built With

Share this project:

Updates