Contact
Let's work together
Supplier Back-Office - B2B Self-Service Portal

Supplier Back-Office - B2B Self-Service Portal

Multilingual SPA enabling European promotional product suppliers to manage their entire presence across the European Sourcing platform ecosystem - dashboard, profile, products, statistics, and commercial campaigns across 5 languages.

2014 - 2016
~2 years
Senior Software Engineer (99.1% of application code)
AngularJS 1.2CoffeeScriptRestangularExpress.jsGruntSCSS/Bootstrap 3Flot.jsWSSEBing TranslategettextFont AwesomeMoment.jsNode.jsBower

Lines of Code

18,711

CoffeeScript, SCSS, HTML

Source Files

185

Application files (excl. dependencies)

AngularJS Controllers

18

Controllers, directives, services, filters

Supported Languages

5

FR, EN, DE, ES, IT

API Endpoints

~35

Custom Directives

14

Presentation

Project definition and scope

supplierbo.europeansourcing.com (Supplier Back-Office) is a single-page application (SPA) serving as the supplier self-service portal for the European Sourcing platform. It provides a private, multilingual workspace where suppliers of promotional and advertising products can manage their entire presence across all European Sourcing Group websites (europeansourcing.com, tendanceobjet.com, etc.).

The application is part of a broader ecosystem of 15+ interconnected applications built by Medialeads, the technology company behind European Sourcing. The promotional product market is a specialized B2B sector where suppliers offer customizable items (pens, bags, textiles, gadgets) with various branding options (screen printing, engraving, embroidery) to resellers (advertising agencies, distributors).

Before this portal, suppliers had to rely on manual interventions from the European Sourcing team to update their profiles, products, and content. The Supplier BO gave them full autonomy over their commercial presence, directly impacting their visibility and sales performance on the platform.

Domain

B2B promotional & advertising products - sourcing, distribution, European marketplace

Target Users

Sales managers, marketing managers, and product managers at promotional product suppliers across Europe (France, UK, Germany, Spain, Italy)

Functional Scope
Multi-method authentication (WSSE, token, cross-site SSO)
Interactive dashboard with visit counters and 6-month trend charts
Commercial contract management (ES+ options, publication dates)
Complete public profile management (7 sections)
ES+ product management with variants, attributes, and tiered pricing
Multilingual news management with docs
Advanced statistics from 3 data sources with filters, charts, and CSV export
Full i18n (5 languages) with automatic Bing Translate integration
System Architecture
Technical Stack
CategoryTechnologyRole
Front-end LanguageCoffeeScriptPrimary front-end language, compiled to JavaScript
FrameworkAngularJS ~1.2.0SPA framework (Single Page Application)
HTTP ClientRestangular ~1.4.0REST API communication
ServerExpress.js ~3.4.7Static file server (production)
Build ToolGrunt ~0.4.4Compilation, minification, watch
CSSSCSS (Sass) + CompassCSS preprocessor
CSS FrameworkBootstrap 3 (Sass)Responsive CSS framework
ChartsFlot.js ~0.8.2Interactive statistics charts
AuthWSSE (opensoft-wsse)API request security
i18ngettext (PHP) + JSON5-language translation system
TranslationBing Translate APIAutomatic content translation
IconsFont Awesome ~4.0.3Icon library
DatesMoment.js ~2.8.1Date manipulation and formatting
Uploadangular-upload ~1.0.10File and image uploads

Objectives, Context, Stakes & Risks

Strategic vision and operational constraints

Objectives
  • Give suppliers full autonomy to manage 100% of their profile, products, news, and statistics without European Sourcing team intervention
  • Deliver a complete multilingual interface in 5 European languages (FR, EN, DE, ES, IT) with automatic translation via Bing Translate
  • Provide actionable analytics giving suppliers visibility on consultation statistics (visits, clicks, trends) across multiple platforms
  • Support commercial campaign management including ES+ promotional products, advertisements, and featured placements
Context

The Supplier BO is integrated into a complex existing ecosystem: the central REST API (api.europeansourcing.com built with Symfony/Propel), the public marketplace site, the extranet v2, the search engine, the translation platform, data feed services, export tools, and a mobile application.

The project is hosted under the medialeads GitHub organization (the technology company behind European Sourcing). Infrastructure runs on dedicated OVH servers (Kimsufi) with the application deployed to /var/www/es_suppliers/. The front-end is fully decoupled from the back-end, communicating exclusively via REST calls with WSSE authentication.

Stakes
  • Direct revenue impact - commercial options (ES+, Idea of the Week, Emailing, Leader Keyword) are paid offers. The Supplier BO is how suppliers activate and manage their commercial investment
  • Supplier satisfaction - the quality of this tool directly impacts the commercial relationship with paying B2B clients
  • European scalability - 5-language support with adapted date formats demonstrates continent-wide market ambition
  • Network reach - 60+ reseller websites fed by supplier content managed through this portal
Risks

Security - WSSE + MD5

Client-side MD5 password hashing is cryptographically weak. WSSE authentication, while functional, lacks modern security standards like JWT or OAuth2

Technical Debt - AngularJS 1.2

AngularJS 1.2 (~2013) reached end-of-life in 2021. All dependencies (Bower, Express 3.x, jQuery 1.11) date from 2013-2014, creating maintenance risk

API Dependency

All business logic lives in the central API. The Supplier BO is fully dependent on the availability and correct functioning of api.europeansourcing.com

Zero Test Coverage

No test files identified (0 spec/test). For an application of this size with client-side business logic (validation, pricing, attributes), this represents significant regression risk

Code Metrics
File Type Distribution

Implementation Phases

Concrete actions and personal contributions

Phase 1
Phase 1 - Architecture & Core Development
~2013-2014
  • Designed and built the complete SPA architecture from scratch with AngularJS 1.2 and CoffeeScript
  • Created 18 controllers organized by functional domain (Contact, Profile, Product, Statistics, News, Contract)
  • Built 14 reusable custom directives forming a mini UI framework (minigeekDatatable, minigeekFlotChart, minigeekI18n, minigeekForm, minigeekDownload)
  • Implemented WSSE authentication with multi-supplier contact management and cross-site SSO via RC4 encryption
  • Engineered the hybrid i18n system: JSON labels generated by PHP/gettext for UI + multilingual API fields indexed by id_language
  • Developed the complete SCSS theme with 97 style files based on Bootstrap 3
Phase 2
Phase 2 - Feature Enrichment
2014-2016
  • Built the statistics module with 3 data sources (European Sourcing, TendanceObjet, Products ES+) with filterable Flot.js charts
  • Implemented the ES+ product management module: CRUD with docs, tiered pricing, dynamic attributes, variants, bulk copy, YouTube videos
  • Created the advertisement and media management sections (banners, photos, YouTube/Dailymotion/Vimeo integration)
  • Migrated the entire codebase from SVN to Git (January 18, 2016)
  • Refined statistics date range handling (min/max dates) and integrated the new translation interface
Phase 3
Phase 3 - Production & Maintenance
2016-2019
  • Maintained stable production deployment via dedicated OVH servers with Express.js serving static files
  • Application actively used by European suppliers until at least August 2019 (documented via screenshots)
  • Branch-based deployment workflow: development branches merged to master, deployed via prod branch
User Flow
Project Timeline
AngularJS Architecture

Actors & Interactions

Team composition and collaboration dynamics

Development Team

Analysis of the git history (28 commits total, all branches) reveals two contributors:

Jose DA COSTA (branches jose and master): author of 99.1% of the code (19,007 lines added out of 19,172 total). He performed the initial SVN import on January 18, 2016, which included the complete application codebase. This confirms that the entire application (architecture, modules, custom directives, i18n, styles) was developed by Jose before the Git migration. His subsequent commits focus on statistics module improvements.

Thomas C. (branch fancyweb): 21 commits representing 0.9% of the code (165 lines added). His contributions cover functional enhancements and bug fixes after initial deployment: translation interface changes, email recipient fixes, product selection features, and news management corrections.

Code Authorship
Git Commit Timeline (2016)
Stakeholders
  • API Team (Symfony/Propel) - backend providing all business data
  • Bing Translate API - external automatic translation service
  • Suppliers (e.g., Plastoria S.A.) - end users managing their B2B presence
  • Resellers - indirect beneficiaries (supplier content displayed on their sites)
Work Methodology

Version control transitioned from SVN (~2013) to Git with GitHub in January 2016. The deployment workflow used branch-based progression: development branches merged into master, then deployed via the prod branch. The Medialeads team used a dedicated DokuWiki for shared technical documentation.

Results

Measurable impact for personal growth and business value

For Me
  • Mastered SPA architecture patterns with AngularJS before the widespread adoption of component-based frameworks
  • Built a complete reusable directive library (minigeek*) that served as a personal UI framework across projects
  • Gained deep experience in complex B2B domain modeling: multi-language product catalogs, tiered pricing, variant management
  • Developed skills in REST API integration patterns with WSSE security, handling 35+ endpoints
  • Sharpened internationalization expertise with a hybrid system covering 5 European languages
For the Company
  • 100% supplier autonomy - complete self-service for profile, products, news, and statistics management
  • 5 European markets covered - full i18n with FR, EN, DE, ES, IT support and localized date formats
  • 60+ reseller websites fed by supplier content managed through this portal
  • Direct revenue tool - commercial options (ES+, Idea of the Week, Emailing, Leader Keyword) managed through the BO
  • ~5-6 years of stable production usage (~2014 to 2019) proving the durability of architectural choices
  • 9 functional modules delivered: authentication, dashboard, contract, profile (7 sub-sections), products ES+, news, statistics (3 sources), i18n, media management
API Endpoints by Category
Functional Module Complexity
Technical Skills Distribution
Features Delivered by Module

Project Aftermath

Life cycle beyond initial delivery

Immediate Impact

After deployment, the Supplier BO became the daily operational tool for all European Sourcing suppliers. Screenshots from August 2019 show a mature, fully functional application with active commercial contracts and real supplier data (contract options, publication dates, product listings). The tool was actively used for at least 5 years after initial deployment.

Medium-Term Evolution

The application continued receiving enhancements through 2016 (product selection features, translation interface updates, news management improvements) before entering a stable maintenance phase. The branch-based deployment (master/prod) allowed controlled releases.

Current State

The application is archived in the "EUROPEAN SOURCING 2019" backup. The complete source code, database dumps, and 25+ detailed screenshots are preserved on the NAS. The codebase demonstrates that while the front-end technology (AngularJS 1.2) became obsolete, the decoupled REST API architecture remained reusable - proving that the front/back separation was the right architectural choice.

Critical Review

Honest retrospective and lessons learned

Strengths
  • Decoupled SPA architecture - clean separation between front-end and REST API allows independent evolution. The front-end makes no assumptions about backend technology
  • Reusable directive framework - the minigeek* directives (DataTable, FlotChart, i18n, Form, Download) form a coherent mini UI framework that accelerated development significantly
  • Polished internationalization - 5 languages with automatic translation, locale-adapted date formats, and browser language detection show genuine care for the European user experience
  • Professional interface - screenshots from 2019 reveal a clean, modern (for its era) interface with clear navigation and consistent design across all modules
  • Complex product management - the ES+ module handles products with variants, dynamic attributes, tiered pricing, and docs - significant functional complexity well-managed on the front-end side
Areas for Improvement
  • Zero test coverage - no spec/test files identified. For an application of this size with client-side business logic (validation, pricing calculations, attribute management), this is a significant risk
  • MD5 password hashing - cryptographically weak and unsuitable for password hashing. bcrypt or argon2 would have been appropriate
  • Outdated dependency versions - AngularJS 1.2 (2013), Express 3.x (2013), jQuery 1.11 (2014), Bower (deprecated since 2017). The entire stack was already obsolete by the time of the last screenshots
  • Login code duplication - authentication pattern for multi-supplier selection is repeated identically in LoginCtrl and RedirectCtrl instead of being extracted to a shared service
  • Direct DOM manipulation - some directives use jQuery DOM manipulation ($("body").append(...), $elem.find(...)) instead of AngularJS mechanisms, complicating testing and maintenance
What I Would Do Differently
  • Add unit tests (Karma/Jasmine) for controllers and E2E tests (Protractor) for critical user flows from the start
  • Plan a migration to Angular 2+ or React/Vue.js around 2017-2018 to extend the application lifespan
  • Extract the minigeek* directive library into a versioned npm package shared across the European Sourcing ecosystem
  • Replace WSSE+MD5 with JWT or OAuth2 and server-side bcrypt hashing
  • Implement a shared authentication service to eliminate the login logic duplication between controllers
Lasting Lessons
  • Front/back decoupling pays off long-term - even with an obsolete front-end stack, the REST API remained reusable for a new front-end without modification
  • Reusable components are an investment - the minigeek* framework probably accelerated development of every section considerably
  • i18n must be designed from day one - the native integration of 5 languages into the architecture (filters, directives, localization service) makes i18n transparent for the developer
  • Documentation and tests are insurance policies - the absence of tests and documentation (nearly empty README) makes project archaeology significantly harder years later

Related journey

Professional experience linked to this achievement

Skills applied

Technical and soft skills applied

Image gallery

Project screenshots and visuals