Inspiration

Contracts influence everyday decisions, but understanding them often requires time and knowledge that people do not have. Important terms can be buried in dense language, making it easy to overlook what you are agreeing to. I built Undersign to make that moment before signing less intimidating: a place to read closely, understand potential concerns, and prepare better questions.

What it does

Undersign is a contract-review prototype that turns dense agreements into a more approachable, interactive experience. Users can upload a PDF or DOCX, paste document text, or explore sample agreements.

The current version uses rule-based analysis(not an LLM yet) to identify supported wording patterns and explain potentially concerning clauses in plain English. Users can explore a 3D document or switch to Reading view, review suggested changes, draft a negotiation email, and generate a printable report or deadline reminder.

Document parsing and analysis happen locally in the browser. The findings are a starting point for review, not a comprehensive assessment, legal advice, or a determination of enforceability.

How I built it

I built the interface with React and TypeScript, used CSS for styling and responsive layouts, and used Vite for development and production builds. The website is deployed on Vercel.

Three.js, ThreeUI components, and custom GLSL power the curved paper and orbital visuals. The paper’s text, labels, and highlights are drawn into canvas textures, allowing them to bend and respond to lighting as part of the same surface.

PDF.js and Mammoth handle PDF and DOCX text extraction. A client-side, rule-based engine checks extracted text for supported clause patterns and generates explanations and severity-based risk scores.

Much of my development time went into establishing the UI/UX: making a complex subject feel approachable while keeping the experience visually distinctive.

Challenges I ran into

One of the biggest challenges was making the 3D paper useful rather than simply decorative. Text and highlights needed to curve naturally with the page without overlapping, overflowing, or becoming disconnected from the document.

Balancing visual ambition with readability, performance, and accessibility was another challenge. I worked through mobile layouts, document-extraction errors, reduced-motion behavior, and interactions between display settings.

I also had to communicate the limits of the analysis honestly. A rule can recognize wording, but it cannot fully understand every agreement or decide whether a term is legally enforceable. Unmatched language must not be mistaken for safe language, as this is still just a prototype I put together.

Accomplishments that I am proud of

I am proud of creating a distinctive interface that connects document review with practical next steps. Instead of stopping at a highlighted clause, Undersign offers explanations, proposed wording, and tools to help users prepare a response.

I am also proud of integrating local document processing, an interactive textured paper surface, Reading view, accessibility controls, and a regression suite with 66 passing tests.

The project establishes a foundation for a more capable review tool while being transparent about what the current prototype can and cannot do.

What I learned

I learned that a polished interface can make complicated information more approachable, but it cannot replace reliable analysis. Visual design and technical depth need to support each other.

Building Undersign also helped me understand the limitations of pattern matching. Rules are useful for recognizable wording, but agreements contain context, exceptions, and relationships between clauses that require deeper interpretation.

Most importantly, I learned that trust depends on clear explanations, accessible interactions, and honest limitations, not just impressive visuals.

What's next for Undersign

My next priority is strengthening the analysis behind the interface. I want to expand clause coverage, test against more varied real-world agreements, and improve extraction for difficult documents, including adding OCR support for scanned PDFs.

I also want to integrate an LLM-based analysis layer that can identify concerns beyond predefined wording patterns and consider relationships between clauses. That would require careful implementation: grounding findings in quoted document passages, evaluating missed issues and false positives, and clearly communicating uncertainty. Any external processing would also need explicit user consent and transparent privacy controls.

Alongside those improvements, I plan to refine mobile document navigation, broaden language support, and conduct usability testing to understand which explanations and next steps people find most helpful.

Share this project:

Updates

Submission history