← Back to all projects

work project

MyLanit – Photo Galleries and Photo Contests Web Part for Corporate Portal

MyLanit – Photo Galleries and Photo Contests Web Part for Corporate Portal

Services

  • Requirements analysis and solution architecture
  • Custom React + Redux web part development
  • SharePoint REST API and list integration
  • TinyMCE rich-text editor integration
  • Admin interface and content moderation tooling
  • API contract design with parallel backend team

Deliverables

  • Self-service photo gallery and contest web part
  • Automated contest lifecycle — voting opens and closes without IT intervention
  • Admin web part with full CRUD, moderation, and results dashboard
  • Masonry grid gallery with infinite scroll and engagement features (likes, comments, voting)

Challenge

LANIT needed a way to run internal photo contests on their corporate SharePoint portal — something that didn't exist out of the box. Employees should be able to upload photos, vote for favourites, and leave comments, while HR managers needed full control over contest lifecycle without touching code or calling IT.

Discovery

After digging into the requirements it became clear the scope was broader than a simple gallery widget. Two distinct modes were needed — a free-form photo gallery and a time-boxed voting contest — each with its own permission model, UI state, and lifecycle. Voting data had to survive portal restarts and integrate with SharePoint lists that already held other corporate content.

Options Considered

Three directions were evaluated before committing to a solution:

  1. Off-the-shelf SharePoint add-ins — rejected because none supported custom voting logic or the client's branding requirements.
  2. iframe-embedded external service — rejected due to corporate security policy prohibiting third-party data processing for internal content.
  3. Custom React web part — chosen. Full control over UX, data ownership stays inside SharePoint, and the codebase remains maintainable by the in-house team.

Decision

A custom React web part was the only path that satisfied all constraints simultaneously: data sovereignty, design freedom, and the ability to ship both modes from a single deployable artifact. Redux was chosen for state management given the complexity of cross-component voting state; Redux-Router handled virtual navigation without requiring server-side routing changes in SharePoint.

Implementation

Frontend and backend were developed in parallel under tight API contract discipline. Photo tiles use a masonry grid for a Pinterest-style layout; react-infinite-scroller eliminates pagination entirely. A custom TinyMCE wrapper bridges the rich-text editor into Redux Forms — a non-trivial integration that took careful lifecycle management to avoid memory leaks. A server-side scheduled job monitors contest end dates and automatically flips contests into results mode, removing any manual step from the HR workflow.

Two role surfaces were shipped: an employee-facing web part (upload, browse, like, comment, vote) and a separate admin web part (full CRUD for galleries and contests, moderation queue, results dashboard with deletion confirmation guards).

Outcome

HR teams went from coordinating photo contests over email with manual vote-counting spreadsheets to a fully self-service workflow. Contest creation takes under two minutes. Voting closes automatically. Results are visible to all employees the moment the deadline passes — no IT involvement required at any stage.

User interface walkthrough

Admin interface walkthrough

Open for contract collaboration

I am available for contract-based collaboration. If you have an interesting project idea, schedule a call via Calendly.

Schedule a 30-min call