+
+
+
{{ "dashboard.customers.title" | translate }}
+
+
+
+ {{ "dashboard.customers.whyTitle" | translate }}
+
+
+
+
+
{{ "dashboard.customers.cards.c1.title" | translate }}
+
{{ "dashboard.customers.cards.c1.text" | translate }}
+
+
+
+
{{ "dashboard.customers.cards.c2.title" | translate }}
+
{{ "dashboard.customers.cards.c2.text" | translate }}
+
+
+
+
{{ "dashboard.customers.cards.c3.title" | translate }}
+
{{ "dashboard.customers.cards.c3.text" | translate }}
+
+
+
+
{{ "dashboard.customers.cards.c4.title" | translate }}
+
{{ "dashboard.customers.cards.c4.text" | translate }}
+
+
+ {{ "dashboard.customers.howTitle" | translate }}
+
-
-
-
- @if(searchEnabled){
-
+
+
+
+
+
+
+
+
+ {{ "dashboard.roadmap.now.label" | translate }}
+
+
{{ "dashboard.roadmap.now.title" | translate }}
+
{{ "dashboard.roadmap.now.text" | translate }}
+
+
+
+
+ {{ "dashboard.roadmap.next.label" | translate }}
+
+
{{ "dashboard.roadmap.next.title" | translate }}
+
{{ "dashboard.roadmap.next.text" | translate }}
+
+
+
+
+ {{ "dashboard.roadmap.beyond.label" | translate }}
+
+
{{ "dashboard.roadmap.beyond.title" | translate }}
+
{{ "dashboard.roadmap.beyond.text" | translate }}
+
+
+
+
+
+
+ {{ "dashboard.finalCta.title" | translate }}
+
+
+
-
+ @if(providerThemeName === 'DOME') {
+
+ }
+
diff --git a/src/app/pages/dashboard/dashboard.component.spec.ts b/src/app/pages/dashboard/dashboard.component.spec.ts
deleted file mode 100644
index 815d1b8e..00000000
--- a/src/app/pages/dashboard/dashboard.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { DashboardComponent } from './dashboard.component';
-
-describe('DashboardComponent', () => {
- let component: DashboardComponent;
- let fixture: ComponentFixture
;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [DashboardComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(DashboardComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/src/app/pages/dashboard/dashboard.component.ts b/src/app/pages/dashboard/dashboard.component.ts
index 5240e6e9..880f0f6e 100644
--- a/src/app/pages/dashboard/dashboard.component.ts
+++ b/src/app/pages/dashboard/dashboard.component.ts
@@ -1,100 +1,80 @@
-import {Component, HostListener, OnInit, ChangeDetectorRef, OnDestroy} from '@angular/core';
-import {EventMessageService} from "../../services/event-message.service";
-import {LocalStorageService} from "../../services/local-storage.service";
-import { ApiServiceService } from 'src/app/services/product-service.service';
-import { ActivatedRoute } from '@angular/router';
-import { Router } from '@angular/router';
-import { LoginInfo } from 'src/app/models/interfaces';
-import * as moment from 'moment';
-import { interval, Subscription, Subject} from 'rxjs';
-import { RefreshLoginServiceService } from "src/app/services/refresh-login-service.service"
-import { StatsServiceService } from "src/app/services/stats-service.service"
-import { LoginServiceService } from "src/app/services/login-service.service"
-import { FormControl } from '@angular/forms';
+import { SlicePipe } from '@angular/common';
+import { ChangeDetectorRef, Component, OnInit, SecurityContext } from '@angular/core';
+import { DomSanitizer } from '@angular/platform-browser';
+import { ActivatedRoute, Router } from '@angular/router';
+import { TranslateModule } from '@ngx-translate/core';
import { initFlowbite } from 'flowbite';
+import * as moment from 'moment';
+import { map, Subject, takeUntil } from 'rxjs';
+import { LoginInfo } from 'src/app/models/interfaces';
+import { ProductOffering } from 'src/app/models/product.model';
+import { EventMessageService } from 'src/app/services/event-message.service';
+import { LocalStorageService } from 'src/app/services/local-storage.service';
+import { LoginServiceService } from 'src/app/services/login-service.service';
+import { ApiServiceService } from 'src/app/services/product-service.service';
+import { StatsServiceService } from 'src/app/services/stats-service.service';
+import { EuropeTrademarkComponent } from 'src/app/shared/europe-trademark/europe-trademark.component';
+import { ThemeConfig } from 'src/app/themes';
import { environment } from 'src/environments/environment';
-import {ThemeService} from "../../services/theme.service";
-import {ThemeConfig} from "../../themes";
-import { takeUntil } from 'rxjs/operators';
+
+interface Stats {
+ services: number;
+ providers: number;
+}
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.component.html',
- styleUrl: './dashboard.component.css'
+ styleUrl: './dashboard.component.css',
+ standalone: true,
+ imports: [TranslateModule, SlicePipe, EuropeTrademarkComponent],
})
-export class DashboardComponent implements OnInit, OnDestroy {
-
- isFilterPanelShown = false;
- showContact:boolean=false;
- searchField = new FormControl();
- searchEnabled = environment.SEARCH_ENABLED;
- domePublish: string = environment.DOME_PUBLISH_LINK
- domeRegister: string = environment.DOME_REGISTER_LINK
- services: string[] = []
- publishers: string[] = []
- currentIndexServ: number = 0;
- currentIndexPub: number = 0;
- delay: number = 2000;
+export class DashboardComponent implements OnInit {
+ private unSub = new Subject();
+ productOfferings?: ProductOffering[];
+ protected MAX_CATEGORIES_PER_PRODUCT_OFFERING = 3;
+
+ providerThemeName = environment.providerThemeName;
currentTheme: ThemeConfig | null = null;
- private themeSubscription: Subscription = new Subscription();
- providerThemeName=environment.providerThemeName;
- private destroy$ = new Subject();
-
- //loginSubscription: Subscription = new Subscription();;
- constructor(private localStorage: LocalStorageService,
- private eventMessage: EventMessageService,
- private statsService : StatsServiceService,
- private route: ActivatedRoute,
- private router: Router,
- private api: ApiServiceService,
- private loginService: LoginServiceService,
- private cdr: ChangeDetectorRef,
- private themeService: ThemeService,
- private refreshApi: RefreshLoginServiceService) {
- this.eventMessage.messages$
- .pipe(takeUntil(this.destroy$))
- .subscribe(ev => {
- if(ev.type === 'FilterShown') {
- this.isFilterPanelShown = ev.value as boolean;
- }
- if(ev.type == 'CloseContact'){
- this.showContact=false;
- this.cdr.detectChanges();
- }
- })
- }
- @HostListener('document:click')
- onClick() {
- if(this.showContact==true){
- this.showContact=false;
- this.cdr.detectChanges();
- }
- }
- startTagTransition() {
- setInterval(() => {
- this.currentIndexServ = (this.currentIndexServ + 1) % this.services.length;
- this.currentIndexPub = (this.currentIndexPub + 1) % this.publishers.length;
- }, this.delay);
+ stats?: Stats;
+
+ constructor(
+ private productService: ApiServiceService,
+ private domSanitizer: DomSanitizer,
+ private route: ActivatedRoute,
+ private loginService: LoginServiceService,
+ private localStorage: LocalStorageService,
+ private eventMessage: EventMessageService,
+ private cdr: ChangeDetectorRef,
+ private router: Router,
+ private statsService: StatsServiceService
+ ) { }
+
+ ngOnInit() {
+ this.getFirstThreeRandomProductOfferings();
+ this.checkRouteForToken();
+ this.getStats()
}
- async ngOnInit() {
- this.themeSubscription = this.themeService.currentTheme$
- .subscribe(theme => {
- this.currentTheme = theme;
- });
- this.destroy$.next();
- this.destroy$.complete();
-
- this.statsService.getStats().then(data=> {
- this.services=data?.services || [];
- this.publishers=data?.organizations || [];
- this.startTagTransition();
+
+ private getStats() {
+ this.statsService.getStats().then(data => {
+ this.stats = {
+ services: data?.services?.length || 0,
+ providers: data?.organizations?.length || 0
+ }
})
- this.isFilterPanelShown = JSON.parse(this.localStorage.getItem('is_filter_panel_shown') as string);
- if(this.route.snapshot.queryParamMap.get('token') != null){
+ }
+
+ private checkRouteForToken() {
+ if (this.route.snapshot.queryParamMap.get('token') != null) {
this.loginService.getLogin(this.route.snapshot.queryParamMap.get('token')).then(data => {
- let info = {
+ console.log('---- loginangular response ----')
+ console.log(data)
+ console.log(data.username)
+
+ const info = {
"id": data.id,
"user": data.username,
"email": data.email,
@@ -103,7 +83,8 @@ export class DashboardComponent implements OnInit, OnDestroy {
"partyId": data.partyId,
"roles": data.roles,
"organizations": data.organizations,
- "logged_as": data.id } as LoginInfo;
+ "logged_as": data.id
+ } as LoginInfo;
// Using organization session by default if provided
if (info.organizations != null && info.organizations.length > 0) {
@@ -113,47 +94,70 @@ export class DashboardComponent implements OnInit, OnDestroy {
this.localStorage.addLoginInfo(info);
this.eventMessage.emitLogin(info);
initFlowbite();
- //this.refreshApi.stopInterval();
- //this.refreshApi.startInterval(((data.expire - moment().unix())-4)*1000, data);
- //this.refreshApi.startInterval(3000, data);
+ console.log('----')
+
})
this.router.navigate(['/dashboard'])
} else {
- //this.localStorage.clear()
- let aux = this.localStorage.getObject('login_items') as LoginInfo;
- // keep stored session data if present
+ console.log('sin token')
+ const aux = this.localStorage.getObject('login_items') as LoginInfo;
+ if (JSON.stringify(aux) != '{}') {
+ console.log(aux)
+ console.log('moment')
+ console.log(aux['expire'])
+ console.log(moment().unix())
+ console.log(aux['expire'] - moment().unix())
+ console.log(aux['expire'] - moment().unix() <= 5)
+ }
}
- this.showContact = true;
this.cdr.detectChanges();
+ console.log('----')
}
- ngOnDestroy(): void {
- if (this.themeSubscription) {
- this.themeSubscription.unsubscribe();
- }
+ private getFirstThreeRandomProductOfferings(): void {
+ this.productService
+ .getAllProducts()
+ .pipe(
+
+ map((items) =>
+ items.map((el) => ({
+ ...el,
+ description: el.description
+ ? (this.domSanitizer.sanitize(
+ SecurityContext.HTML,
+ el.description,
+ ) ?? undefined)
+ : el.description,
+ })),
+
+ ),
+ map((items) => {
+ const result = new Set();
+ const max = Math.min(3, items.length);
+
+ while (result.size < max) {
+ result.add(Math.floor(Math.random() * items.length));
+ }
+
+ return [...result].map((i) => items[i]);
+ }),
+
+ takeUntil(this.unSub),
+ )
+ .subscribe((picked) => {
+ this.productOfferings = picked;
+ });
}
-
- filterSearch(event: any) {
- if(this.searchField.value!='' && this.searchField.value != null){
- this.router.navigate(['/search', {keywords: this.searchField.value}]);
- } else {
- this.router.navigate(['/search']);
- }
+ goToSearch() {
+ this.router.navigate(['/search']);
}
- goTo(path:string) {
- this.router.navigate([path]);
- }
-
- hasLongWord(str: string | undefined, threshold = 20) {
- if(str){
- return str.split(/\s+/).some(word => word.length > threshold);
- } else {
- return false
- }
+ ngOnDestroy() {
+ this.unSub.complete();
+ this.unSub.unsubscribe();
}
}
diff --git a/src/app/services/app-init.service.ts b/src/app/services/app-init.service.ts
index e3af7af4..3af2948d 100644
--- a/src/app/services/app-init.service.ts
+++ b/src/app/services/app-init.service.ts
@@ -31,11 +31,11 @@ export class AppInitService {
environment.KB_GUIDELNES_URL = config.domeGuidelines;
environment.REGISTRATION_FORM_URL = config.domeRegistrationForm;
environment.DFT_CATALOG_ID = config.defaultId;
- environment.SELLER_ROLE = config.roles.seller;
- environment.BUYER_ROLE = config.roles.customer;
- environment.ADMIN_ROLE = config.roles.admin;
- environment.ORG_ADMIN_ROLE = config.roles.orgAdmin;
- environment.CERTIFIER_ROLE = config.roles.certifier;
+ environment.SELLER_ROLE = config.roles?.seller;
+ environment.BUYER_ROLE = config.roles?.customer;
+ environment.ADMIN_ROLE = config.roles?.admin;
+ environment.ORG_ADMIN_ROLE = config.roles?.orgAdmin;
+ environment.CERTIFIER_ROLE = config.roles?.certifier;
environment.quoteApi = config.quoteApi ?? 'http://localhost:8080/quoteManagement';
environment.analytics = config.analytics ?? 'https://analytics.dome-marketplace-sbx.org/',
environment.feedbackCampaign = config.feedbackCampaign ?? false,
diff --git a/src/app/services/product-service.service.ts b/src/app/services/product-service.service.ts
index 62b752de..96f3b8a9 100644
--- a/src/app/services/product-service.service.ts
+++ b/src/app/services/product-service.service.ts
@@ -1,12 +1,13 @@
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
-import {catchError, lastValueFrom, map, of} from 'rxjs';
+import {catchError, lastValueFrom, map, Observable, of} from 'rxjs';
import { Category, LoginInfo } from '../models/interfaces';
import { environment } from 'src/environments/environment';
import {components} from "../models/product-catalog";
type ProductOffering = components["schemas"]["ProductOffering"];
import {LocalStorageService} from "./local-storage.service";
import * as moment from 'moment';
+import { ProductOffering as ProductOfferingModel } from '../models/product.model';
import { jwtDecode } from "jwt-decode";
@Injectable({
@@ -21,6 +22,12 @@ export class ApiServiceService {
constructor(private http: HttpClient,private localStorage: LocalStorageService) { }
+ getAllProducts(): Observable {
+ const fakeLimit = 999;
+ let url = `${ApiServiceService.BASE_URL}${ApiServiceService.API_PRODUCT}/productOffering?lifecycleStatus=Launched&limit=${fakeLimit}`;
+ return this.http.get(url);
+ }
+
getProducts(page:any,keywords:any) {
let url = `${ApiServiceService.BASE_URL}${ApiServiceService.API_PRODUCT}/productOffering?limit=${ApiServiceService.PRODUCT_LIMIT}&offset=${page}&lifecycleStatus=Launched`;
if(keywords!=undefined){
diff --git a/src/app/shared/europe-trademark/europe-trademark.component.ts b/src/app/shared/europe-trademark/europe-trademark.component.ts
new file mode 100644
index 00000000..44737f8f
--- /dev/null
+++ b/src/app/shared/europe-trademark/europe-trademark.component.ts
@@ -0,0 +1,25 @@
+import { Component } from '@angular/core';
+import { TranslateModule } from '@ngx-translate/core';
+
+@Component({
+ selector: 'app-europe-trademark',
+ template: `
+
+
+

+
+ {{ 'europeTrademark' | translate }}
+
+
+
+ `,
+ standalone: true,
+ imports: [TranslateModule],
+})
+export class EuropeTrademarkComponent {
+ constructor() {}
+}
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 67389307..8769a8ee 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -1,6 +1,151 @@
{
"_yes": "Yes",
"_no": "No",
+
+
+ "dashboard": {
+ "nav": {
+ "forCustomers": "For Customers",
+ "forProviders": "For Providers",
+ "marketplace": "Marketplace",
+ "about": "About",
+ "resources": "Resources"
+ },
+ "hero": {
+ "eyebrow": "Distributed Open Marketplace for Europe",
+ "title": "The trusted European Ecosystem for cloud, edge & AI services",
+ "subtitle": "The DOME marketplace brings verified, EU-compliant cloud, edge and AI services into one transparent, interoperable platform, simplifying services discovery and procurement for organisations and expanding market reach for cloud providers.",
+ "ctaCustomers": "I’m looking for digital services",
+ "ctaProviders": "I offer digital services",
+ "browseAll": "Browse all services →",
+ "asideTitle": "Marketplace snapshot",
+ "stats": {
+ "servicesLabel": "verified services",
+ "providersLabel": "registered providers",
+ "euHosted": "EU-hosted & compliance-driven",
+ "transparency": "End-to-end transparency on data & pricing"
+ },
+ "moreAbout": "More about DOME"
+ },
+ "whatIs": {
+ "title": "What is DOME Marketplace?",
+ "subtitle": "DOME is the European marketplace that provides a unified environment where trust, compliance, and interoperability form the foundation of how digital services are published, compared, and used across Europe.",
+ "cards": {
+ "c1": {
+ "title": "Trusted, Sovereign Digital Ecosystem",
+ "text": "DOME ensures services operate under EU rules for security, data protection, and sovereignty, creating a reliable environment for digital operations across Europe."
+ },
+ "c2": {
+ "title": "Transparency and Comparability",
+ "text": "Consistent documentation, pricing clarity, and shared trust indicators make it easy to understand, compare, and assess digital services."
+ },
+ "c3": {
+ "title": "Interoperability and Federation",
+ "text": "DOME connects multiple marketplaces and providers through shared standards, enabling seamless discovery, integration, and cross-market collaboration."
+ },
+ "c4": {
+ "title": "Fair and Open Market Access",
+ "text": "The ecosystem removes barriers to entry, supports SMEs, and prevents vendor lock-in, ensuring all participants can compete and grow on equal terms."
+ }
+ }
+ },
+ "marketplace": {
+ "title": "Explore verified services",
+ "subtitle": "Search across cloud, edge, AI, data and other digital services from trusted European providers.",
+ "searchPlaceholder": "Search by keyword, category or provider…",
+ "browseFullCatalog": "Browse full catalog →",
+ "viewService": "View service"
+ },
+ "customers": {
+ "title": "For Customers",
+ "whyTitle": "Why to use DOME",
+ "cards": {
+ "c1": {
+ "title": "Access to verified digital services",
+ "text": "Discover offerings validated against EU security and data-protection rules, guaranteeing trusted providers and full data sovereignty."
+ },
+ "c2": {
+ "title": "Transparent, guided service discovery",
+ "text": "Quickly identify suitable offerings through consistent documentation, clear pricing, trust indicators, and intuitive filtering and comparison tools."
+ },
+ "c3": {
+ "title": "Powerful procurement tools",
+ "text": "Access built-in capabilities such as tendering, tailored-offer requests, and structured comparisons that make sourcing from multiple providers fast, clear, and efficient."
+ },
+ "c4": {
+ "title": "Unified access to a broad ecosystem",
+ "text": "Benefit from a growing network of European providers and federated marketplaces, giving you broader choice and easier access to specialised services."
+ }
+ },
+ "howTitle": "How DOME works",
+ "how": {
+ "s1Title": "Register as a customer",
+ "s1Text": "Create your customer profile",
+ "s2Title": "Search & compare",
+ "s2Text": "Find digital services according to your needs, use standardised documentation and trust badges to assess suitability",
+ "s3Title": "Connect & procure",
+ "s3Text": "Contact providers and procure directly, or use the DOME marketplace procurement tools in order to get the services that suit your needs"
+ },
+ "startJourney": "Start your customer journey now"
+ },
+ "providers": {
+ "title": "For Providers",
+ "whyTitle": "Why to use DOME",
+ "cards": {
+ "c1": {
+ "title": "Reach a pan-European market",
+ "text": "Expand your visibility across Europe and access new customer segments through a unified, trusted ecosystem."
+ },
+ "c2": {
+ "title": "Strengthen trust with customers",
+ "text": "Showcase compliance, transparency, and service quality through DOME’s verified trust indicators and documentation standards."
+ },
+ "c3": {
+ "title": "Leverage DOME’s provider tools",
+ "text": "Integrated tools for onboarding, service management, analytics, procurement and promotion to enhance your market presence and operational efficiency."
+ },
+ "c4": {
+ "title": "Complement and extend portfolio",
+ "text": "Discover services and partners across the ecosystem to enrich your offering and unlock new business opportunities."
+ }
+ },
+ "howTitle": "How DOME works",
+ "how": {
+ "s1Title": "Onboard your organisation",
+ "s1Text": "Complete the onboarding process and receive your verifiable credentials",
+ "s2Title": "Describe & verify your services",
+ "s2Text": "Use DOME Marketplace templates to detail features, data handling and compliance",
+ "s3Title": "Publish & reach customers",
+ "s3Text": "Ready to go! Your services are available in the DOME catalogues!"
+ },
+ "startJourney": "Start your provider journey now"
+ },
+ "roadmap": {
+ "title": "Growing the DOME ecosystem",
+ "subtitle": "DOME is at an early but active stage, expanding together with customers and providers.",
+ "now": {
+ "label": "Now",
+ "title": "Core marketplace live",
+ "text": "Initial catalog of verified services and providers."
+ },
+ "next": {
+ "label": "Next 6–12 months",
+ "title": "More services, better tools",
+ "text": "Expanded catalog, richer filtering, improved verification workflows."
+ },
+ "beyond": {
+ "label": "Beyond",
+ "title": "Deep EU integration",
+ "text": "Alignment with European data spaces and advanced trust services."
+ }
+ },
+ "finalCta": {
+ "title": "Ready to find out what DOME Marketplace can do for your business?",
+ "discover": "Discover services",
+ "publish": "Publish your service"
+ }
+},
+"europeTrademark": "Distributed Open Marketplace for Europe (DOME) Project has received funding from European Union’s Digital Europe Programme under the Grant Agreement No 101084071.",
"DASHBOARD": {
"_title": "DOME Marketplace is out! See what's new",
"_header": "Digital Trust to move forward",
diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json
index 5782d397..99d968a0 100644
--- a/src/assets/i18n/es.json
+++ b/src/assets/i18n/es.json
@@ -1,6 +1,152 @@
{
"_yes": "Yes",
"_no": "No",
+
+ "dashboard": {
+ "nav": {
+ "forCustomers": "For Customers",
+ "forProviders": "For Providers",
+ "marketplace": "Marketplace",
+ "about": "About",
+ "resources": "Resources"
+ },
+ "hero": {
+ "eyebrow": "Distributed Open Marketplace for Europe",
+ "title": "The trusted European Ecosystem for cloud, edge & AI services",
+ "subtitle": "The DOME marketplace brings verified, EU-compliant cloud, edge and AI services into one transparent, interoperable platform, simplifying services discovery and procurement for organisations and expanding market reach for cloud providers.",
+ "ctaCustomers": "I’m looking for digital services",
+ "ctaProviders": "I offer digital services",
+ "browseAll": "Browse all services →",
+ "asideTitle": "Marketplace snapshot",
+ "stats": {
+ "servicesLabel": "verified services",
+ "providersLabel": "registered providers",
+ "euHosted": "EU-hosted & compliance-driven",
+ "transparency": "End-to-end transparency on data & pricing"
+ },
+ "moreAbout": "More about DOME"
+ },
+ "whatIs": {
+ "title": "What is DOME Marketplace?",
+ "subtitle": "DOME is the European marketplace that provides a unified environment where trust, compliance, and interoperability form the foundation of how digital services are published, compared, and used across Europe.",
+ "cards": {
+ "c1": {
+ "title": "Trusted, Sovereign Digital Ecosystem",
+ "text": "DOME ensures services operate under EU rules for security, data protection, and sovereignty, creating a reliable environment for digital operations across Europe."
+ },
+ "c2": {
+ "title": "Transparency and Comparability",
+ "text": "Consistent documentation, pricing clarity, and shared trust indicators make it easy to understand, compare, and assess digital services."
+ },
+ "c3": {
+ "title": "Interoperability and Federation",
+ "text": "DOME connects multiple marketplaces and providers through shared standards, enabling seamless discovery, integration, and cross-market collaboration."
+ },
+ "c4": {
+ "title": "Fair and Open Market Access",
+ "text": "The ecosystem removes barriers to entry, supports SMEs, and prevents vendor lock-in, ensuring all participants can compete and grow on equal terms."
+ }
+ }
+ },
+ "marketplace": {
+ "title": "Explore verified services",
+ "subtitle": "Search across cloud, edge, AI, data and other digital services from trusted European providers.",
+ "searchPlaceholder": "Search by keyword, category or provider…",
+ "browseFullCatalog": "Browse full catalog →",
+ "viewService": "View service"
+ },
+ "customers": {
+ "title": "For Customers",
+ "whyTitle": "Why to use DOME",
+ "cards": {
+ "c1": {
+ "title": "Access to verified digital services",
+ "text": "Discover offerings validated against EU security and data-protection rules, guaranteeing trusted providers and full data sovereignty."
+ },
+ "c2": {
+ "title": "Transparent, guided service discovery",
+ "text": "Quickly identify suitable offerings through consistent documentation, clear pricing, trust indicators, and intuitive filtering and comparison tools."
+ },
+ "c3": {
+ "title": "Powerful procurement tools",
+ "text": "Access built-in capabilities such as tendering, tailored-offer requests, and structured comparisons that make sourcing from multiple providers fast, clear, and efficient."
+ },
+ "c4": {
+ "title": "Unified access to a broad ecosystem",
+ "text": "Benefit from a growing network of European providers and federated marketplaces, giving you broader choice and easier access to specialised services."
+ }
+ },
+ "howTitle": "How DOME works",
+ "how": {
+ "s1Title": "Register as a customer",
+ "s1Text": "Create your customer profile",
+ "s2Title": "Search & compare",
+ "s2Text": "Find digital services according to your needs, use standardised documentation and trust badges to assess suitability",
+ "s3Title": "Connect & procure",
+ "s3Text": "Contact providers and procure directly, or use the DOME marketplace procurement tools in order to get the services that suit your needs"
+ },
+ "startJourney": "Start your customer journey now"
+ },
+ "providers": {
+ "title": "For Providers",
+ "whyTitle": "Why to use DOME",
+ "cards": {
+ "c1": {
+ "title": "Reach a pan-European market",
+ "text": "Expand your visibility across Europe and access new customer segments through a unified, trusted ecosystem."
+ },
+ "c2": {
+ "title": "Strengthen trust with customers",
+ "text": "Showcase compliance, transparency, and service quality through DOME’s verified trust indicators and documentation standards."
+ },
+ "c3": {
+ "title": "Leverage DOME’s provider tools",
+ "text": "Integrated tools for onboarding, service management, analytics, procurement and promotion to enhance your market presence and operational efficiency."
+ },
+ "c4": {
+ "title": "Complement and extend portfolio",
+ "text": "Discover services and partners across the ecosystem to enrich your offering and unlock new business opportunities."
+ }
+ },
+ "howTitle": "How DOME works",
+ "how": {
+ "s1Title": "Onboard your organisation",
+ "s1Text": "Complete the onboarding process and receive your verifiable credentials",
+ "s2Title": "Describe & verify your services",
+ "s2Text": "Use DOME Marketplace templates to detail features, data handling and compliance",
+ "s3Title": "Publish & reach customers",
+ "s3Text": "Ready to go! Your services are available in the DOME catalogues!"
+ },
+ "startJourney": "Start your provider journey now"
+ },
+ "roadmap": {
+ "title": "Growing the DOME ecosystem",
+ "subtitle": "DOME is at an early but active stage, expanding together with customers and providers.",
+ "now": {
+ "label": "Now",
+ "title": "Core marketplace live",
+ "text": "Initial catalog of verified services and providers."
+ },
+ "next": {
+ "label": "Next 6–12 months",
+ "title": "More services, better tools",
+ "text": "Expanded catalog, richer filtering, improved verification workflows."
+ },
+ "beyond": {
+ "label": "Beyond",
+ "title": "Deep EU integration",
+ "text": "Alignment with European data spaces and advanced trust services."
+ }
+ },
+ "finalCta": {
+ "title": "Ready to find out what DOME Marketplace can do for your business?",
+ "discover": "Discover services",
+ "publish": "Publish your service"
+ }
+ },
+"europeTrademark": "Distributed Open Marketplace for Europe (DOME) Project has received funding from European Union’s Digital Europe Programme under the Grant Agreement No 101084071.",
+
+
"DASHBOARD": {
"_title": "DOME Marketplace is out! See what's new",
"_header": "Digital Trust to move forward",
diff --git a/src/environments/environment.development.ts b/src/environments/environment.development.ts
index a109d8b3..ebc94c9a 100644
--- a/src/environments/environment.development.ts
+++ b/src/environments/environment.development.ts
@@ -22,7 +22,7 @@ export const environment = {
searchOrganizationsEndpoint: '/api/searchOrganizations',
//searchOrganizationsEndpoint: 'org-api/searchOrganizations',
- CUSTOMER_BILLING:'/customerBill',
+ CUSTOMER_BILLING: '/customerBill',
CONSUMER_BILLING_URL: 'http://localhost:8640',
INVOICE_LIMIT: 100,
@@ -56,20 +56,20 @@ export const environment = {
TICKETING_SYSTEM_URL: "",
KNOWLEDGE_BASE_URL: "https://knowledgebase.dome-marketplace.org/",
KB_ONBOARDING_GUIDELINES_URL: "https://knowledgebase.dome-marketplace-prd.org/books/company-onboarding-process-guide-for-cloud-service-providers-csp",
- KB_GUIDELNES_URL:"https://knowledgebase.dome-marketplace-prd.org/books/managing-orders-products-and-subscriptions",
+ KB_GUIDELNES_URL: "https://knowledgebase.dome-marketplace-prd.org/books/managing-orders-products-and-subscriptions",
REGISTRATION_FORM_URL: "https://onboarding.dome-marketplace.eu/",
SEARCH_ENABLED: true,
PURCHASE_ENABLED: true,
DOME_TRUST_LINK: "",
DOME_ABOUT_LINK: '',
DOME_REGISTER_LINK: '',
- DOME_PUBLISH_LINK:'',
+ DOME_PUBLISH_LINK: '',
DOME_LINKEDIN: 'https://www.linkedin.com/company/dome-marketplace/',
DOME_YOUTUBE: 'https://www.youtube.com/channel/UC8UiL59S0JiaYYr14w5eOzA',
DOME_X: 'https://x.com/DomeMarketplace',
BUNDLE_ENABLED: false,
DFT_CATALOG_ID: '',
- MAX_FILE_SIZE:3145728,
+ MAX_FILE_SIZE: 3145728,
providerThemeName: 'default',
quoteApi: 'http://localhost:8080/quoteManagement',
quoteEndpoints: {