Summary
A secure web app for marketers to submit, track, and publish marketing materials. Users can create requests, upload assets, and follow a clear review workflow with statuses:
Submitted → Flagged → Approved → Completed.
I owned the design in Figma and worked on integrating my designs into functional user interfaces.
Problem:
Marketers needed a consistent process to publish marketing content across channels. Previously, requests were fragmented (email/Sheets), making status visibility, version control, and cycle time unreliable.
Goals
- Give marketers a single place to add, update, and publish content.
- Provide transparent status tracking for each request.
- Reduce back-and-forth by making requirements explicit at submission.
- Support a review team workflow: validate, flag errors, approve, publish.
Users & Use Cases
- Marketers: Submit requests with files and required metadata; monitor status.
- Review Team: Validate submissions, flag issues with comments, approve when ready.
- Managers: See request queues, status distribution, and throughput at a glance
DESIGN PROCESS:
Design Phase (10 months)
- Worked closely with product owners to translate business requirements into designs.
- Lead weekly design reviews: wireframes → hi-fi prototypes.
- Demoed interaction flows (submission form, queue filters, status changes).
- Iterated on error states, empty states, and file upload UX.
- Finalized component specs: form field rules, table behaviors, status badges.
Build Phase
- Frontend: React + Tailwind (my responsibility).
- User testing.
Information Architecture:
- Dashboard: choose a task (Create Request / View Queue / Manage Drafts).
- Create Request: guided form + file upload; validation before submission.
- Request Queue: table of user requests with status, last updated, assignee, and actions.
- Request Detail: metadata, files, comments from reviewers, status history.
- Notifications: user sees when a request is Flagged (with reasons) and can Resubmit.
Key Features I Implemented:
- Request Creation Form
- Required fields, helper text, and inline validation.
- File upload with type/size checks; drag-and-drop and progress indicator.
- Prevent submit until all required fields and valid files are present.
- Request Queue Table
- Sort by status / updated date; filter and quick search.
- Status badges: Submitted, Flagged, Approved, Completed (color-coded).
- Row actions (View, Edit/Resubmit when Flagged).
- Status Workflow
- After submit → Submitted.
- Reviewer flags → Flagged with inline comments; user edits and resubmits.
- Reviewer approves → Approved; upon publish → Completed.
- Accessibility
- Semantic HTML, labeled form controls, focus rings, keyboard nav, color contrast.
- Clear error messaging for screen readers.
- Performance & UX
- Optimistic UI for small updates where safe.
- Debounced search/filter for queues.
- Skeleton loaders and empty states for clarity.
Tech Highlights:
- React with functional components and custom hooks for form logic and queue fetching.
- Tailwind CSS for fast, consistent UI with design tokens and responsive layout.
- State management kept local per view with lightweight context for user/session.
- Error handling: API guards, toast messages, and inline field errors.
- API integration: fetch/axios (depending on stack) with typed response shapes; retry for transient failures.
Collaboration:
- Partnered with backend to define request payloads and status transitions.
- Provided weekly demos to stakeholders; incorporated feedback into UI polish.
Outcomes:
- Replaced a scattered, manual process with a trackable, self-service workflow.
- Improved visibility for marketers (clear status and next steps).
- Reduced rework via validation and explicit reviewer feedback on flagged items.
- Established a reusable UI pattern (forms, tables, status badges) for other internal tools.
Challenges & What I Learned:
- Workflow clarity beats clever UI: explicit statuses and comments reduced confusion.
- Validation upfront saves time: catching missing metadata early prevents long review loops.
- Design handoff discipline: naming, spacing tokens, and shared components sped up dev.
- Small, frequent demos kept stakeholders aligned and minimized rework.