Client project3 min read
MyLanit, Photo Galleries and Photo Contests Web Part for Corporate Portal

Tech stack
Links
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:
- Off-the-shelf SharePoint add-ins: rejected because none supported custom voting logic or the client's branding requirements.
- iframe-embedded external service: rejected due to corporate security policy prohibiting third-party data processing for internal content.
- 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).
Almost all of the work happened on remote Windows servers. The remote desktop client became practically a second home, because every task started with connecting to a remote server.

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, with no IT involvement required at any stage.
User interface walkthrough
Admin interface walkthrough
Analytics service
Collecting statistics from the internal portal into Google Analytics. The user data in the recording is made up and the secrets are test ones; it is published now that the confidentiality period has run out.
A walkthrough of the client's spec, showing how the business requirement for a report on a given metric can be met inside the off-the-shelf system already in place, without building something new.
Related
Projects

Jiro Health, Practice Intelligence for Clinicians
Before: US medical practitioners had to piece together income, referrals and cash flows from systems that were slow to integrate. After: as a principal/founding engineer I own API development end to end for my pods, building enterprise-grade interfaces on Node.js with Python background data processing.

Chelyabinsk State University, SharePoint Portal Development and Administration
Before: the university SharePoint portal lacked what the platform does not ship with: an events calendar, admission rankings fed from FoxPro exports, a mobile layout and spam-safe email addresses. After: custom web parts added a Google-synced calendar, SSRS ranking lists that update from an upload and hidden emails, and the site got a responsive mobile version.

RussianPost, Corporate Portal for Government Postal Deliveries
Russian Post had dozens of data-heavy screens with no consistent grid component. We built a standardized, server-aware CustomGrid, and then wired its entire state into Redux, so every table in the portal behaved the same way.
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