Sector · Retail & Food

Retail and food: many brands, many locations, one structure

In retail, hardly anyone commissions a website. What is commissioned is a structure in which companies, brands, locations, news items and job adverts exist exactly once and are published in many places through configuration. We know this market from two projects with different scopes: the TYPO3 group website of a retail group whose history goes back to 1806 — there we took on the accessibility rebuild in the live system, we did not build the structure — and a closed B2B shop in the plant trade, where the planting season sets the schedule. This page does not describe what we can do technically; that is on the service pages. It describes how you can tell that someone has already seen this sector from the inside.

What sets this market apart technically

Mandatory information has to travel with the product

Anyone offering pre-packed food through distance selling must make the mandatory information under Article 14 of the EU Food Information Regulation, Regulation (EU) No 1169/2011, available before the purchase contract is concluded: among other things the name of the food, the list of ingredients, allergens, the nutrition declaration, the net quantity and the responsible company. The only exception is the date of minimum durability or the use-by date; it has to be present at delivery, but then in full. If the information is not given with the offer itself but provided through other appropriate means, no additional costs may be charged for it. On top of that comes the unit price under the German Price Indication Ordinance (Preisangabenverordnung), per unit of quantity — for food normally per kilogram or litre, and for nominal quantities below 250 grams or millilitres also per 100 grams or millilitres. In technical terms this means: these fields have to move from the source into the shop and must not be retyped by an editor, otherwise they will be wrong after the third change of range. What applies in an individual case is assessed with binding effect by a lawyer; we build the mandatory fields and the import rules.

Product data is created outside the company

A dealer does not produce article data, it receives it. From suppliers, in different formats and with different levels of care: a CSV export here, a catalogue in a sector-specific format there, a GTIN here, none there, a data sheet as a PDF here, an image 400 pixels wide there. The work therefore does not sit in the shop, it sits in the import — normalise, enforce mandatory fields, make gaps visible instead of quietly filling them with placeholders. A product range with incomplete articles is manageable as long as you can call up at any time which articles they are and which field is missing. It becomes unmanageable the moment the import fills the gaps itself and nobody can tell any more what has been maintained and what has been guessed.

In B2B, prices are not public

In trade between companies, terms and conditions do not belong on the open web. At Diderk Heinje the shop therefore sits entirely behind a registration that is checked and approved; only after that do the product range and the prices become visible at all, and customer groups in Shopware control which terms an approved account sees. This is not a design question but an operating condition — it decides how registration, approval and price determination have to be built together, and it also decides whether the offer falls within the scope of consumer protection rules in the first place.

The peak load is in the calendar

In many sectors the peak arrives without warning. In the plant trade it does not: planting happens in autumn and in spring, bare-root stock is lifted and shipped while the plants have no leaves, and between those periods there are quiet months. The calendar is known before the year starts. That is an advantage if you use it: changes and updates belong between the time windows, load tests before them, not inside them. Anyone working on the range import during the planting season is doing it while revenue is running. Predictable peaks are not a technical problem but a scheduling problem — and scheduling problems are solved in the project plan, not in the infrastructure.

A retail company is rarely one company

J. Bünting Beteiligungs AG, based in Leer in East Frisia, traces its history back to 1806. The group includes the famila and Combi food stores, the tea trading house J. Bünting, the online food retailer myTime.de and the Markant Nordwest co-operation with independent retailers. Each of these units has its own customers, its own product range and its own language. The group website has to bring that together without levelling it out — company profile, group companies, press, careers and contact in one place, but visibly separate.

In technical terms this is not a design problem but a structural problem. A company profile, a press release, a contact person, a job advert: ideally each of these objects exists exactly once and appears in several places through configuration — in the group overview, in the section of the respective company, in the press list, in the search, in internal links. Anyone who copies pages instead has five places to maintain the first time a managing director changes, and will not find four of them again. The editorial work stays distributed, which is normal in retail; only the set of objects must not be.

That is why the first question in a retail project is not what it should look like but which objects exist and who maintains them. Location, company, brand, person, news item, job advert — this is what the data model in the content management system is built from, and it determines which permissions each editorial team needs. At Bünting the website runs on TYPO3, and TYPO3 is designed for exactly this: several websites and languages in one instance, permissions along the organisation, structured fields instead of one large text box. Our scope there, however, was the accessibility rebuild in the live system, not building the structure from scratch — we say so because otherwise it sounds like more than it was. We have built a multi-location structure of this kind outside the food industry: for Autohaus Brüggemann, one TYPO3 website brings together six locations and eight franchised brands, each location with its own contact people, opening hours and service content, while the editorial building blocks exist only once and the permission structure reflects who may edit which area. The arguments for the system are on our page about corporate websites. Here only the order matters: structure before layout.

Locations, opening hours and 24 December

Retail means stores, and stores mean opening hours. That sounds like a detail until the exceptions arrive: on 24 December, state law limits opening hours, and it does so differently in each federal state. Reformation Day is a public holiday in Lower Saxony and Bremen, but not in North Rhine-Westphalia — a group with stores in both states maintains two truths for the same day. On top of that come early closing for stocktaking on a working day, a bridge day between a public holiday and the weekend with reduced staffing, and the bakery in the store entrance area with its own rhythm. If this information sits in free-text fields, it will be wrong in the third year. If it is held in structured form — regular hours plus dated exceptions — a store manager can maintain it directly, and the output is correct in all places at the same time.

More than the time of day depends on the location: address, directions, services, contact people, open positions. In a retail group with many stores, the careers section is not an appendix but an entry point of its own, because applicants search close to a location and a list without any location reference is useless to them. A job advert that knows which location it belongs to appears on the location page, in the overall overview and in the application form without being entered three times. How strongly that section is actually used is something the analytics of your own website will tell you — we do not claim it as a rule for the sector.

For search engines and AI assistants the same advantage arises from another direction. Where location, opening hours and offers are held as data, they can be marked up in structured form and become quotable. Where they sit inside a paragraph, a model has to interpret them. We do not bill this part separately, because it comes with the structure that is being built anyway. Anything beyond that — crawler access, text structure, llms.txt, systematic markup across the whole set of pages — is a project of its own with its own effort, and it is described on our page about Answer Engine Optimization.

Here, accessibility is a question of reach

The German Accessibility Improvement Act (Barrierefreiheitsstärkungsgesetz, BFSG) has applied since 28 June 2025 to electronic commerce services aimed at consumers — that is, wherever a contract is concluded online. A purely informational group website does not necessarily fall under it, a purely B2B shop generally does not, and for services there is an additional exemption for micro-enterprises with fewer than 10 employees and an annual turnover or annual balance sheet total of no more than 2 million euros. Bünting raised the website to this level anyway. That was a decision, not an obligation, and we say it that way because the opposite claim — you have to — quickly loses credibility in retail. Anyone who asserts an obligation that does not exist gives away the argument that actually carries.

The reference standard is the European standard EN 301 549; it describes the recognised state of the art, while the legally binding rules are the BFSG and the BFSGV. The version currently cited in the Official Journal of the EU refers, for web content, to WCAG version 2.1, conformance level AA — that is what the work at Bünting was measured and tested against. In new audits we already apply WCAG 2.2 AA, because the additional criteria are manageable and save a second round. The work took place in the live TYPO3 system, without a relaunch, in the Fluid template and in the CSS rather than through an overlay script: skip links to navigation and content as the first focusable elements in the source, landmarks for header, navigation and main area, labelled form and search fields, alternative texts, and a heading hierarchy that follows the structure rather than the layout. Contrast and text size controls are provided as a separate TYPO3 extension and remain reachable on every page. Testing was done in three passes: automated, manual with keyboard and screen reader, and with a view to everyday editorial work.

In retail the last pass is the decisive one. Accessible templates help little if heading levels are skipped or alternative texts left empty with the next weekly offer. Because the corrections sit in the template and not in individual pages, new content inherits the current state. And in a retail group the cases sit side by side: the informational group website, the B2C shop where a private individual buys, and the closed B2B area which, according to the distinction above, is not covered. The obligation attaches to the individual offer, not to the group; the binding assessment belongs to legal advice. What speaks for reach applies regardless — food retail serves practically every age group, and contrast, text size and keyboard operation help more people than those the legislator thought of first. Details of our test procedure are on our page about accessibility.

The season can be planned — that is exactly the point

For Diderk Heinje Pflanzenhandel we are responsible for registration, catalogue and interfaces of a closed Shopware shop in B2B. Nursery stock is not a static product range: availability depends on the season, on lifting and on the weather, and the same plant exists in several qualities and grades — height, girth, container or root-balled. A catalogue that does not reflect this produces a query on every second order. The catalogue holds more than 5,000 plant articles and grades, structured according to botanical taxonomy, and the search finds both botanical and German names so that an order does not fail because of a spelling.

Stock levels and prices do not come from the shop but from the leading system, the ERP. The syncs run as scheduled jobs, daily, because stock shifts considerably within a season — not as a list in an email attachment that someone enters on Friday. That is the difference between a shop that reflects the reality of the business and a shop that claims it with a delay of several days.

For operations, one simple rule follows from this: changes belong between the time windows. Range imports, Shopware updates, rebuilding the search — all of that is unremarkable in summer and expensive during the planting season. We therefore plan projects in this sector around the seasonal calendar and test peak loads before they arrive. Where we take over operations, they run on our own servers in Germany; for the period when it counts, there are the support levels BASIC to PREMIUM with a response time of 24, 8, 4 or 2 hours, billed as a monthly flat fee, net, per project. Without an agreement we handle requests in the order received within 48 hours during business hours, Mon to Fri, 9:00 to 16:00.

In the B2B plant trade, the time window decides

The trade is with nurseries, landscaping contractors, municipalities and resellers. Buyers there do not primarily compare prices, they compare dates. The planting date is fixed, the site is scheduled, the crew arrives on Tuesday. An article that will be available in four weeks does not exist for that site. This shifts the requirements for a shop: the important function is not the price filter but the reliable statement of what is available now and in which grade.

This also determines how access is built. The shop sits entirely behind a verified registration; only after approval do the product range and the prices become visible, and customer groups control the terms. Registration, approval and price determination sit in the same system — that is why closed access stays manageable in daily work and does not have to be maintained in a secondary list.

The third point is where sector knowledge shows most clearly: an order has to arrive ready for picking. Species, grade, quality, quantity — complete, in the taxonomy of the business, not in the wording of the buyer. Where that works, it removes the clarification loops between sales and operations from daily business. Where it does not work, someone spends every morning on the phone chasing orders, and the shop has saved nothing, it has only changed the channel.

Frequently asked questions

What experience does Sharpness have in retail and the food industry?

Two projects document this sector, each with a clearly defined scope. For J. Bünting Beteiligungs AG in Leer — the group includes famila, Combi, the tea trading house J. Bünting and myTime.de, among others — we raised the existing TYPO3 group website to the accessibility level of WCAG 2.1 AA and EN 301 549 in the live system, without a relaunch. For Diderk Heinje Pflanzenhandel we are responsible for registration, catalogue and interfaces of a closed B2B shop on Shopware, with more than 5,000 articles and grades and a daily sync of stock levels and prices. You will find both cases with the starting point, the approach and the result in our references.

Have you already built a multi-location structure with shared objects?

Yes, but not in the food industry — we keep that separate. At Bünting our scope was the accessibility rebuild, not the data model. We built the multi-location structure for Autohaus Brüggemann: one TYPO3 website covering six locations and eight franchised brands, each location with its own contact people, opening hours and service content, while the editorial building blocks exist only once and are controlled by configuration. The permission structure reflects who may edit which area. The task in multi-store retail is the same, only with different objects.

Does the BFSG apply to our retail website?

That depends on the individual offer, not on the company. The German Accessibility Improvement Act (Barrierefreiheitsstärkungsgesetz, BFSG) has applied since 28 June 2025 to electronic commerce services aimed at consumers — the B2C shop of a retail group falls under it, a purely informational group website not necessarily, and a purely B2B shop generally not. For services there is an additional exemption for micro-enterprises with fewer than 10 employees and an annual turnover or annual balance sheet total of no more than 2 million euros. In larger groups several cases exist side by side, and then it is an individual assessment that belongs with a lawyer. We implement the technical requirements and tell you beforehand what the reference standard actually demands and what it does not.

Why TYPO3 for a retail group and not WordPress?

Because of the structure, not because of any belief. As soon as several companies, brands or locations come together in one website, you need structured objects, granular permissions along the organisation, approval processes and possibly several languages in one instance. That is exactly what TYPO3 is built for. If the website stays manageable and the editorial team is small, WordPress is the cheaper choice, and then we recommend it. With us the system recommendation comes before the quote, and with reasons.

How do we keep opening hours up to date across many locations?

By storing them as data rather than as text: regular opening hours at the location, plus dated exceptions for public holidays, stocktaking or special openings. This is not cosmetic: 24 December is restricted differently in each federal state, and Reformation Day is a public holiday in Lower Saxony and Bremen but not in North Rhine-Westphalia — a group operating across state borders needs date exceptions for that, not a line of text. Maintenance belongs where the information originates: in the hands of the store, with a suitably tailored input form and its own permissions. The output comes from the same source everywhere — location page, store finder, structured markup for search engines. Free-text fields for opening hours are the most common reason why retail websites show wrong information in their third year.

What is different about selling food online compared with other shops?

Above all the information duties at the article. Article 14 of the EU Food Information Regulation, Regulation (EU) No 1169/2011, requires that for pre-packed food in distance selling the mandatory information is available before the purchase contract is concluded: among other things the name, the list of ingredients, allergens, the nutrition declaration, the net quantity and the responsible company. The only exception is the date of minimum durability or the use-by date, which only has to be present at delivery. If the information is provided through other appropriate means, no additional costs may arise for it. On top of that comes the unit price under the German Price Indication Ordinance (Preisangabenverordnung), per unit of quantity — for small nominal quantities below 250 grams or millilitres, stating it per 100 grams or millilitres is permitted. In technical terms this means: mandatory fields that come from the data source and are not lost on the way into the shop. Different rules apply to unpackaged goods; that has to be clarified case by case.

Can prices in the shop become visible only after approval?

Yes, and in B2B trade this is the normal case. At Diderk Heinje the entire shop sits behind a registration: new customers fill in a form, the approval is checked, and only after that are the product range and the prices shown at all. Customer groups in Shopware then control which terms an approved account sees. What matters is that registration, approval and price determination sit in the same system — otherwise a secondary list appears that nobody maintains.

How do you deal with seasonal peaks?

We plan around them. In the plant trade the time windows are in autumn and in spring, and it is quiet in between — so updates, changes to the product range and load tests belong in the quiet months, and during a time window a change freeze applies to everything that is not urgent. That is unspectacular and works better than optimisation under load. We define the required infrastructure before the season; where we take over operations, they run on our own servers in Germany. We do not promise availability percentages.

Where do stock levels and prices in the shop come from?

From the leading system, through interfaces, as scheduled jobs. At Heinje, stock levels, prices and range changes run into the shop daily, and orders come back in structured form. The reason for that frequency is specific to the sector: within a season the stock shifts so strongly that a weekly sync would produce wrong availability — and in B2B, wrong availability costs more than a missing discount. How we build such connections is described on our page about interface and API development.

Our supplier data is incomplete. Is that a blocker?

No, but it determines the order of work. We build the import so that mandatory fields are enforced and missing information ends up in a report instead of being quietly filled with placeholders. That makes the state of the product range readable at any time: which article, which field, which supplier. Then you can decide what has to be requested before launch and what stays offline for now. The expensive case is the opposite one — a shop that looks complete and is not.

We have several brands with their own websites. One instance or several?

That is decided by the editorial work, not by the technology. If the brands share content — press releases, job adverts, contact people, locations — there is a strong case for one TYPO3 instance with several sites: shared objects, separate websites, permissions per brand. If the brands are completely independent in editorial and design terms and share nothing, separation is cleaner and operations are simpler. To decide this we look at which content is actually needed more than once, not at what the organisation chart looks like.

What does a project of this size cost?

That depends on the scope, and flat rates would be guesswork here. An accessibility rebuild in an existing template is a different project from a group website with a new data model or a B2B shop connected to the leading system. We start with a review of the current state or a requirements workshop; after that you get a quote with clearly separated items. And if a project does not pay off in the form proposed, we say so beforehand.

Do you take over existing TYPO3 or Shopware installations from another agency?

Yes. We start with a code and system audit: the set of extensions or plugins, custom development, version status, interfaces, data quality in the product range. After that you know what state the system is in and what has to be done first. A relaunch is not a precondition — at Bünting the entire accessibility rebuild ran in the live system, and in many retail projects repairing what is already running is the better first step.

How quickly do you respond if something fails in the shop during the season?

With a service agreement, according to the level booked: BASIC 24 hours, STANDARD 8 hours, ADVANCED 4 hours, PREMIUM 2 hours response time, billed as a monthly flat fee, net, per project. Without an agreement we handle requests in the order received within 48 hours during business hours, Mon to Fri, 9:00 to 16:00. Which level makes sense depends less on annual turnover than on the calendar in retail: a shop that runs quietly for a large part of the year and does its business in two time windows needs the short response time exactly then.

Let us talk about your structure, not about your layout

Tell us how many companies, brands and locations come together and where your product range and prices come from today. We will tell you whether your system can still carry that — Mon to Fri, 9:00 to 16:00.

Call Start a project