Compare commits
11 Commits
4edb56285f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5988e095c7 | |||
| a95f6c6895 | |||
| fd4e0ea883 | |||
| caac8addcb | |||
| bc8a69c8ef | |||
| 43dbb14333 | |||
| 43eef37eef | |||
| 300a53abb9 | |||
| 4299e7e276 | |||
| 0e5e4d8383 | |||
| edc934cfbd |
@@ -0,0 +1,629 @@
|
||||
/**
|
||||
* mybizapp.js — my-biz.app UI Components
|
||||
* ========================================
|
||||
* Provides two global modal functions:
|
||||
*
|
||||
* show_trial(plan?) — free-trial sign-up modal
|
||||
* HTML lives in components/trial_modal.html (lazy-fetched)
|
||||
*
|
||||
* show_calendar() — book-a-meeting modal (Google Calendar iframe)
|
||||
*
|
||||
* CONFIGURATION (set before this script loads)
|
||||
* ----------------------------------------------
|
||||
* window.TrialModalConfig = {
|
||||
* webhook : string — POST endpoint (multipart/form-data)
|
||||
* product : string — hidden field value (default: "odoo_19")
|
||||
* title : string — modal heading
|
||||
* subtitle : string — modal sub-heading
|
||||
* submitLabel : string — submit button label
|
||||
* confirmTitle : string — success heading
|
||||
* confirmSub : string — success body text
|
||||
* calendarUrl : string — Google Calendar embed URL
|
||||
* triggerSelector : string — CSS selectors for trial triggers
|
||||
* (default: "#open-modal, .open-modal")
|
||||
* calendarSelector : string — CSS selectors for calendar triggers
|
||||
* (default: ".open-calendar")
|
||||
* locations : Array<{ value: string, label: string }>
|
||||
* utm_source / utm_medium / utm_campaign / utm_term / utm_content
|
||||
* }
|
||||
*
|
||||
* AUTO-WIRING (on DOMContentLoaded)
|
||||
* ------------------------------------
|
||||
* #open-modal, .open-modal → show_trial(data-plan?)
|
||||
* .open-calendar → show_calendar()
|
||||
*
|
||||
* DESIGN TOKENS (CSS custom properties, fallback to my-biz.app theme)
|
||||
* --------------------------------------------------------------------
|
||||
* --tm-bg, --tm-card, --tm-white, --tm-silver, --tm-grey
|
||||
* --tm-gold, --tm-gold-hi, --tm-gold-lo, --tm-gold-glow, --tm-border, --tm-radius
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* 1. BASE PATH (resolved from this script's src) */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
var _scriptBase = (function () {
|
||||
var s = document.currentScript;
|
||||
if (s && s.src) return s.src.replace(/\/[^/]+$/, "/") + "/";
|
||||
return "components/";
|
||||
})();
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* 2. CONFIG */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
var DEFAULTS = {
|
||||
webhook: "",
|
||||
product: "odoo_19",
|
||||
title: "Start Your 4 Weeks Free Trial",
|
||||
subtitle: "Test drive your back-office in a 4-week free trial.",
|
||||
submitLabel: "Start Free Trial",
|
||||
confirmTitle: "Thank you! \uD83C\uDF89",
|
||||
confirmSub: "We\u2019ve received your request and a specialist will be in touch within one business day.",
|
||||
calendarUrl: "https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c",
|
||||
triggerSelector: "#open-modal, .open-modal",
|
||||
calendarSelector: ".open-calendar",
|
||||
locations: [
|
||||
{ value: "boston", label: "\uD83C\uDDFA\uD83C\uDDF8 Boston" },
|
||||
{ value: "manchester", label: "\uD83C\uDDEC\uD83C\uDDE7 Manchester" },
|
||||
{ value: "mumbai", label: "\uD83C\uDDEE\uD83C\uDDF3 Mumbai" },
|
||||
{ value: "saopaulo", label: "\uD83C\uDDE7\uD83C\uDDF7 S\u00e3o Paulo" },
|
||||
{ value: "meppel", label: "\uD83C\uDDF3\uD83C\uDDF1 Meppel" },
|
||||
{ value: "sydney", label: "\uD83C\uDDE6\uD83C\uDDFA Sydney" },
|
||||
],
|
||||
utm_source: "homepage",
|
||||
utm_medium: "direct",
|
||||
utm_campaign: "none",
|
||||
utm_term: "",
|
||||
utm_content: "",
|
||||
};
|
||||
|
||||
var cfg = {};
|
||||
for (var k in DEFAULTS) {
|
||||
if (Object.prototype.hasOwnProperty.call(DEFAULTS, k)) cfg[k] = DEFAULTS[k];
|
||||
}
|
||||
var userCfg = window.TrialModalConfig || {};
|
||||
for (var k in userCfg) {
|
||||
if (Object.prototype.hasOwnProperty.call(userCfg, k)) cfg[k] = userCfg[k];
|
||||
}
|
||||
|
||||
/* URL query string overrides UTM config */
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"].forEach(function (p) {
|
||||
var v = urlParams.get(p);
|
||||
if (v) cfg[p] = v;
|
||||
});
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* 3. INJECT SHARED CSS */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
var CSS = [
|
||||
/* Token fallbacks — scoped so host-page :root overrides still win */
|
||||
"#tm-overlay, #cal-overlay {",
|
||||
" --tm-bg: rgba(62,39,35,0.84);",
|
||||
" --tm-card: #fff3e0;",
|
||||
" --tm-white: #3e2723;",
|
||||
" --tm-silver: #6d4c41;",
|
||||
" --tm-grey: #a1887f;",
|
||||
" --tm-gold: #e65100;",
|
||||
" --tm-gold-hi: #fb8c00;",
|
||||
" --tm-gold-lo: #bf360c;",
|
||||
" --tm-gold-glow: rgba(230,81,0,0.18);",
|
||||
" --tm-border: rgba(230,81,0,0.18);",
|
||||
" --tm-radius: 28px;",
|
||||
"}",
|
||||
|
||||
/* ---- Shared overlay ---- */
|
||||
"#tm-overlay, #cal-overlay {",
|
||||
" position: fixed; inset: 0; z-index: 9900;",
|
||||
" display: none; align-items: center; justify-content: center;",
|
||||
" padding: 20px;",
|
||||
" background: var(--tm-bg);",
|
||||
" backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);",
|
||||
" box-sizing: border-box;",
|
||||
"}",
|
||||
|
||||
/* ================================================================ */
|
||||
/* TRIAL MODAL */
|
||||
/* ================================================================ */
|
||||
|
||||
"#tm-box {",
|
||||
" position: relative; width: 100%; max-width: 640px;",
|
||||
" padding: 44px; background: var(--tm-card);",
|
||||
" border-radius: var(--tm-radius);",
|
||||
" border: 1px solid rgba(230,81,0,0.24);",
|
||||
" box-shadow: 0 30px 90px rgba(0,0,0,0.3);",
|
||||
" box-sizing: border-box;",
|
||||
"}",
|
||||
|
||||
"#tm-close {",
|
||||
" position: absolute; top: 18px; right: 18px;",
|
||||
" width: 40px; height: 40px; border-radius: 50%;",
|
||||
" color: var(--tm-grey); background: rgba(93,64,55,0.05);",
|
||||
" font-size: 1.2rem; border: none; cursor: pointer; line-height: 1;",
|
||||
"}",
|
||||
"#tm-close:hover { color: var(--tm-gold); }",
|
||||
|
||||
"#tm-box .tm-title {",
|
||||
" font-family: Georgia, 'Times New Roman', serif;",
|
||||
" font-size: 2.2rem; font-weight: 700; line-height: 1.05; margin: 0 0 10px;",
|
||||
" background: linear-gradient(135deg, var(--tm-gold-lo) 0%, var(--tm-gold) 38%, var(--tm-gold-hi) 55%, var(--tm-gold) 75%, var(--tm-gold-lo) 100%);",
|
||||
" -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;",
|
||||
"}",
|
||||
|
||||
"#tm-box .tm-subtitle {",
|
||||
" font-size: 0.9rem; color: var(--tm-silver); margin: 0 0 26px;",
|
||||
"}",
|
||||
|
||||
".tm-grid {",
|
||||
" display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px;",
|
||||
"}",
|
||||
".tm-field-group { margin-bottom: 18px; }",
|
||||
".tm-grid .tm-field-group.full { grid-column: 1 / -1; }",
|
||||
|
||||
".tm-label {",
|
||||
" display: block; margin-bottom: 8px;",
|
||||
" font-size: 0.62rem; font-family: system-ui, -apple-system, sans-serif;",
|
||||
" text-transform: uppercase; letter-spacing: 0.08em; color: var(--tm-gold);",
|
||||
"}",
|
||||
|
||||
".tm-field {",
|
||||
" width: 100%; padding: 14px 16px; border-radius: 16px;",
|
||||
" background: rgba(93,64,55,0.05); border: 1px solid var(--tm-border);",
|
||||
" color: var(--tm-white); box-sizing: border-box; font: inherit; outline: none;",
|
||||
"}",
|
||||
".tm-field:focus { border-color: var(--tm-gold); box-shadow: 0 0 0 3px var(--tm-gold-glow); }",
|
||||
".tm-field::placeholder { color: var(--tm-grey); }",
|
||||
|
||||
".tm-select { position: relative; }",
|
||||
".tm-select-btn { position: relative; text-align: left; cursor: pointer; padding-right: 42px; background: none; border: none; }",
|
||||
".tm-select-btn::after {",
|
||||
" content: ''; position: absolute; right: 16px; top: 50%;",
|
||||
" width: 14px; height: 8px; transform: translateY(-50%);",
|
||||
" background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='8'%3E%3Cpath d='M1 1l6 6 6-6' stroke='%23E65100' stroke-width='1.8' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");",
|
||||
" background-repeat: no-repeat; background-position: center; pointer-events: none;",
|
||||
"}",
|
||||
".tm-select-btn.is-placeholder { color: var(--tm-grey); }",
|
||||
|
||||
".tm-select-menu {",
|
||||
" position: absolute; top: calc(100% + 8px); left: 0; right: 0; z-index: 3;",
|
||||
" max-height: 220px; padding: 8px; background: var(--tm-card);",
|
||||
" border: 1px solid var(--tm-border); border-radius: 16px;",
|
||||
" box-shadow: 0 18px 40px rgba(62,39,35,0.16); overflow-y: auto; display: none;",
|
||||
"}",
|
||||
".tm-select.open .tm-select-menu { display: block; }",
|
||||
|
||||
".tm-select-option {",
|
||||
" width: 100%; padding: 10px 12px; border: none; border-radius: 12px;",
|
||||
" background: transparent; color: var(--tm-white);",
|
||||
" text-align: left; font: inherit; cursor: pointer;",
|
||||
" transition: background 0.2s, color 0.2s;",
|
||||
"}",
|
||||
".tm-select-option:hover, .tm-select-option:focus-visible, .tm-select-option.is-selected {",
|
||||
" outline: none; background: rgba(230,81,0,0.1); color: var(--tm-gold);",
|
||||
"}",
|
||||
|
||||
".tm-submit {",
|
||||
" width: 100%; margin-top: 8px; padding: 15px 20px; border-radius: 50px; border: none;",
|
||||
" cursor: pointer; font-family: system-ui, -apple-system, sans-serif;",
|
||||
" font-size: 0.95rem; font-weight: 600; letter-spacing: 0.02em;",
|
||||
" color: var(--tm-card);",
|
||||
" background: linear-gradient(135deg, var(--tm-gold-lo) 0%, var(--tm-gold) 38%, var(--tm-gold-hi) 55%, var(--tm-gold) 75%, var(--tm-gold-lo) 100%);",
|
||||
" transition: opacity 0.2s;",
|
||||
"}",
|
||||
".tm-submit:hover { opacity: 0.88; }",
|
||||
".tm-submit:disabled { opacity: 0.56; cursor: not-allowed; }",
|
||||
|
||||
"#tm-confirm { display: none; text-align: center; padding-top: 8px; }",
|
||||
"#tm-confirm .tm-confirm-title {",
|
||||
" font-family: Georgia, 'Times New Roman', serif;",
|
||||
" font-size: 1.6rem; color: var(--tm-gold-hi); margin: 0 0 12px;",
|
||||
"}",
|
||||
"#tm-confirm .tm-confirm-sub { color: var(--tm-silver); font-size: 0.9rem; margin: 0 0 24px; }",
|
||||
|
||||
/* ================================================================ */
|
||||
/* CALENDAR MODAL */
|
||||
/* ================================================================ */
|
||||
|
||||
"#cal-box {",
|
||||
" position: relative; width: 100%; max-width: 780px;",
|
||||
" background: var(--tm-card);",
|
||||
" border-radius: var(--tm-radius);",
|
||||
" border: 1px solid rgba(230,81,0,0.24);",
|
||||
" box-shadow: 0 30px 90px rgba(0,0,0,0.3);",
|
||||
" box-sizing: border-box; overflow: hidden;",
|
||||
"}",
|
||||
|
||||
"#cal-header {",
|
||||
" display: flex; align-items: center; justify-content: space-between;",
|
||||
" padding: 22px 32px;",
|
||||
" border-bottom: 1px solid var(--tm-border);",
|
||||
"}",
|
||||
|
||||
"#cal-header .cal-title {",
|
||||
" font-family: Georgia, 'Times New Roman', serif;",
|
||||
" font-size: 1.5rem; font-weight: 700; margin: 0;",
|
||||
" background: linear-gradient(135deg, var(--tm-gold-lo) 0%, var(--tm-gold) 38%, var(--tm-gold-hi) 55%, var(--tm-gold) 75%, var(--tm-gold-lo) 100%);",
|
||||
" -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;",
|
||||
"}",
|
||||
|
||||
"#cal-close {",
|
||||
" width: 40px; height: 40px; border-radius: 50%; flex-shrink: 0;",
|
||||
" color: var(--tm-grey); background: rgba(93,64,55,0.05);",
|
||||
" font-size: 1.2rem; border: none; cursor: pointer; line-height: 1;",
|
||||
"}",
|
||||
"#cal-close:hover { color: var(--tm-gold); }",
|
||||
|
||||
"#cal-frame {",
|
||||
" width: 100%; height: 620px; border: none; display: block;",
|
||||
"}",
|
||||
|
||||
/* ================================================================ */
|
||||
/* RESPONSIVE */
|
||||
/* ================================================================ */
|
||||
|
||||
"@media (max-width: 860px) {",
|
||||
" #tm-box { padding: 34px 22px; }",
|
||||
" .tm-grid { grid-template-columns: 1fr; }",
|
||||
" #cal-header { padding: 18px 20px; }",
|
||||
" #cal-frame { height: 540px; }",
|
||||
"}",
|
||||
"@media (max-width: 480px) {",
|
||||
" #tm-box .tm-title { font-size: 1.8rem; }",
|
||||
" #cal-header .cal-title { font-size: 1.2rem; }",
|
||||
" #cal-frame { height: 480px; }",
|
||||
"}",
|
||||
].join("\n");
|
||||
|
||||
var _styleEl = document.createElement("style");
|
||||
_styleEl.id = "mba-styles";
|
||||
_styleEl.textContent = CSS;
|
||||
document.head.appendChild(_styleEl);
|
||||
|
||||
/* ================================================================== */
|
||||
/* TRIAL MODAL */
|
||||
/* ================================================================== */
|
||||
|
||||
var _trialLoading = false;
|
||||
var _trialLoaded = false;
|
||||
var _trialQueue = []; /* pending plan args while HTML is fetching */
|
||||
|
||||
/* --- show_trial(plan?) -------------------------------------------- */
|
||||
function show_trial(plan) {
|
||||
if (_trialLoaded) {
|
||||
_openTrial(plan);
|
||||
return;
|
||||
}
|
||||
_trialQueue.push(plan !== undefined ? plan : null);
|
||||
if (!_trialLoading) {
|
||||
_trialLoading = true;
|
||||
_loadTrialModal();
|
||||
}
|
||||
}
|
||||
|
||||
/* --- Fetch + inject trial_modal.html ------------------------------ */
|
||||
function _loadTrialModal() {
|
||||
var url = _scriptBase + "trial_modal.html";
|
||||
fetch(url)
|
||||
.then(function (r) {
|
||||
if (!r.ok) throw new Error("[mybizapp] trial_modal.html fetch failed: " + r.status);
|
||||
return r.text();
|
||||
})
|
||||
.then(function (html) {
|
||||
var tmp = document.createElement("div");
|
||||
tmp.innerHTML = html;
|
||||
var node = tmp.firstElementChild;
|
||||
document.body.appendChild(node);
|
||||
|
||||
_applyTrialConfig();
|
||||
_wireTrialEvents();
|
||||
|
||||
_trialLoaded = true;
|
||||
_trialLoading = false;
|
||||
|
||||
if (_trialQueue.length) {
|
||||
var plan = _trialQueue[_trialQueue.length - 1];
|
||||
_trialQueue = [];
|
||||
_openTrial(plan);
|
||||
}
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.error(err);
|
||||
_trialLoading = false;
|
||||
_trialQueue = [];
|
||||
});
|
||||
}
|
||||
|
||||
/* --- Apply TrialModalConfig overrides after HTML is in the DOM ---- */
|
||||
function _applyTrialConfig() {
|
||||
/* Text content */
|
||||
var titleEl = document.getElementById("tm-title");
|
||||
if (titleEl) titleEl.textContent = cfg.title;
|
||||
|
||||
var subEl = document.querySelector("#tm-box .tm-subtitle");
|
||||
if (subEl) subEl.textContent = cfg.subtitle;
|
||||
|
||||
var submitEl = document.querySelector("#tm-form .tm-submit");
|
||||
if (submitEl) submitEl.textContent = cfg.submitLabel;
|
||||
|
||||
var confirmTitleEl = document.querySelector("#tm-confirm .tm-confirm-title");
|
||||
if (confirmTitleEl) confirmTitleEl.textContent = cfg.confirmTitle;
|
||||
|
||||
var confirmSubEl = document.querySelector("#tm-confirm .tm-confirm-sub");
|
||||
if (confirmSubEl) confirmSubEl.textContent = cfg.confirmSub;
|
||||
|
||||
/* Locations — rebuild menu only if config provides a custom list */
|
||||
if (userCfg.locations) {
|
||||
var menu = document.getElementById("tm-location-menu");
|
||||
if (menu) {
|
||||
menu.innerHTML = cfg.locations.map(function (loc) {
|
||||
return '<button type="button" class="tm-select-option" data-value="'
|
||||
+ _esc(loc.value) + '">' + _esc(loc.label) + "</button>";
|
||||
}).join("\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* UTM hidden fields */
|
||||
var form = document.getElementById("tm-form");
|
||||
if (form) {
|
||||
var utmMap = {
|
||||
utm_source: cfg.utm_source,
|
||||
utm_medium: cfg.utm_medium,
|
||||
utm_campaign: cfg.utm_campaign,
|
||||
utm_term: cfg.utm_term,
|
||||
utm_content: cfg.utm_content,
|
||||
};
|
||||
Object.keys(utmMap).forEach(function (name) {
|
||||
var el = form.querySelector('[name="' + name + '"]');
|
||||
if (el) el.value = utmMap[name];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* --- Wire all trial modal events ---------------------------------- */
|
||||
function _wireTrialEvents() {
|
||||
var overlay = document.getElementById("tm-overlay");
|
||||
var box = document.getElementById("tm-box");
|
||||
var closeBtn = document.getElementById("tm-close");
|
||||
var form = document.getElementById("tm-form");
|
||||
var confirmDiv = document.getElementById("tm-confirm");
|
||||
var confirmClose = document.getElementById("tm-confirm-close");
|
||||
var planField = document.getElementById("tm-plan");
|
||||
var productField = document.getElementById("tm-product");
|
||||
var locationField = document.getElementById("tm-location");
|
||||
var locationSelect = document.getElementById("tm-location-select");
|
||||
var locationBtn = document.getElementById("tm-location-btn");
|
||||
var locationMenu = document.getElementById("tm-location-menu");
|
||||
var defaultProduct = productField.value;
|
||||
|
||||
/* Location picker */
|
||||
function _syncLabel() {
|
||||
var val = locationField.value || "";
|
||||
var selected = null;
|
||||
locationMenu.querySelectorAll(".tm-select-option").forEach(function (opt) {
|
||||
var isSel = opt.getAttribute("data-value") === val;
|
||||
if (isSel) selected = opt;
|
||||
opt.classList.toggle("is-selected", isSel);
|
||||
opt.setAttribute("aria-selected", isSel ? "true" : "false");
|
||||
});
|
||||
locationBtn.textContent = selected ? selected.textContent.trim() : "Select your server location";
|
||||
locationBtn.classList.toggle("is-placeholder", !selected);
|
||||
locationBtn.setAttribute("aria-expanded", locationSelect.classList.contains("open") ? "true" : "false");
|
||||
}
|
||||
|
||||
function _openLoc() { locationSelect.classList.add("open"); _syncLabel(); }
|
||||
function _closeLoc() { locationSelect.classList.remove("open"); _syncLabel(); }
|
||||
|
||||
locationBtn.addEventListener("click", function () {
|
||||
locationSelect.classList.contains("open") ? _closeLoc() : _openLoc();
|
||||
});
|
||||
locationMenu.querySelectorAll(".tm-select-option").forEach(function (opt) {
|
||||
opt.addEventListener("click", function () {
|
||||
locationField.value = opt.getAttribute("data-value") || "";
|
||||
_closeLoc();
|
||||
});
|
||||
});
|
||||
document.addEventListener("click", function (e) {
|
||||
if (!locationSelect.contains(e.target)) _closeLoc();
|
||||
});
|
||||
|
||||
/* Store open/close functions so show_trial() can call them */
|
||||
overlay._openTrial = function (plan) {
|
||||
planField.value = plan || "General Free Trial";
|
||||
productField.value = defaultProduct; /* always pinned */
|
||||
if (window._mbsTracking) window._mbsTracking.applyToFields(form);
|
||||
_closeLoc();
|
||||
overlay.style.display = "flex";
|
||||
document.body.style.overflow = "hidden";
|
||||
};
|
||||
|
||||
overlay._closeTrial = function () {
|
||||
overlay.style.display = "none";
|
||||
document.body.style.overflow = "";
|
||||
setTimeout(function () {
|
||||
form.style.display = "";
|
||||
confirmDiv.style.display = "none";
|
||||
form.reset();
|
||||
planField.value = "General Free Trial";
|
||||
productField.value = defaultProduct;
|
||||
locationField.value = "";
|
||||
if (window._mbsTracking) window._mbsTracking.applyToFields(form);
|
||||
_closeLoc();
|
||||
var btn = form.querySelector(".tm-submit");
|
||||
btn.textContent = cfg.submitLabel;
|
||||
btn.disabled = false;
|
||||
}, 200);
|
||||
};
|
||||
|
||||
/* Close triggers */
|
||||
closeBtn.addEventListener("click", function () { overlay._closeTrial(); });
|
||||
confirmClose.addEventListener("click", function () { overlay._closeTrial(); });
|
||||
overlay.addEventListener("click", function (e) {
|
||||
if (e.target === overlay || !box.contains(e.target)) overlay._closeTrial();
|
||||
});
|
||||
document.addEventListener("keydown", function (e) {
|
||||
if (e.key === "Escape") {
|
||||
if (locationSelect.classList.contains("open")) { _closeLoc(); return; }
|
||||
if (overlay.style.display === "flex") overlay._closeTrial();
|
||||
}
|
||||
});
|
||||
|
||||
/* Form submit */
|
||||
form.addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
if (!cfg.webhook) {
|
||||
console.warn("[mybizapp] No webhook URL set. Add window.TrialModalConfig.webhook.");
|
||||
return;
|
||||
}
|
||||
var btn = form.querySelector(".tm-submit");
|
||||
var formData = new FormData(form);
|
||||
if (window._mbsTracking) {
|
||||
formData = window._mbsTracking.appendToFormData(formData);
|
||||
window._mbsTracking.trackEvent("Trial", { source: planField.value || "General Free Trial" });
|
||||
}
|
||||
btn.textContent = "Sending\u2026";
|
||||
btn.disabled = true;
|
||||
/* Show confirmation regardless — webhook may not return CORS headers */
|
||||
fetch(cfg.webhook, { method: "POST", body: formData })
|
||||
.then(function () { form.style.display = "none"; confirmDiv.style.display = "block"; })
|
||||
.catch(function () { form.style.display = "none"; confirmDiv.style.display = "block"; });
|
||||
});
|
||||
}
|
||||
|
||||
/* --- Internal open helper (called after HTML is confirmed ready) -- */
|
||||
function _openTrial(plan) {
|
||||
var overlay = document.getElementById("tm-overlay");
|
||||
if (overlay && overlay._openTrial) overlay._openTrial(plan);
|
||||
}
|
||||
|
||||
/* ================================================================== */
|
||||
/* CALENDAR MODAL */
|
||||
/* ================================================================== */
|
||||
|
||||
var _calInjected = false;
|
||||
|
||||
/* --- show_calendar() ---------------------------------------------- */
|
||||
function show_calendar() {
|
||||
if (!_calInjected) _buildCalendarModal();
|
||||
var overlay = document.getElementById("cal-overlay");
|
||||
if (overlay) {
|
||||
overlay.style.display = "flex";
|
||||
document.body.style.overflow = "hidden";
|
||||
}
|
||||
}
|
||||
|
||||
/* --- Build and inject the calendar modal HTML --------------------- */
|
||||
function _buildCalendarModal() {
|
||||
var html = [
|
||||
'<div id="cal-overlay" role="dialog" aria-modal="true" aria-labelledby="cal-title">',
|
||||
' <div id="cal-box">',
|
||||
' <div id="cal-header">',
|
||||
' <h2 class="cal-title" id="cal-title">Book a Meeting</h2>',
|
||||
' <button id="cal-close" aria-label="Close">×</button>',
|
||||
' </div>',
|
||||
' <iframe',
|
||||
' id="cal-frame"',
|
||||
' src="' + _esc(cfg.calendarUrl) + '"',
|
||||
' title="Book a Meeting"',
|
||||
' loading="lazy"',
|
||||
' ></iframe>',
|
||||
' </div>',
|
||||
'</div>',
|
||||
].join("\n");
|
||||
|
||||
var tmp = document.createElement("div");
|
||||
tmp.innerHTML = html;
|
||||
document.body.appendChild(tmp.firstElementChild);
|
||||
_calInjected = true;
|
||||
|
||||
_wireCalendarEvents();
|
||||
}
|
||||
|
||||
/* --- Wire calendar modal events ----------------------------------- */
|
||||
function _wireCalendarEvents() {
|
||||
var overlay = document.getElementById("cal-overlay");
|
||||
var box = document.getElementById("cal-box");
|
||||
var closeBtn = document.getElementById("cal-close");
|
||||
|
||||
function _closeCalendar() {
|
||||
overlay.style.display = "none";
|
||||
document.body.style.overflow = "";
|
||||
}
|
||||
|
||||
closeBtn.addEventListener("click", _closeCalendar);
|
||||
overlay.addEventListener("click", function (e) {
|
||||
if (e.target === overlay || !box.contains(e.target)) _closeCalendar();
|
||||
});
|
||||
document.addEventListener("keydown", function (e) {
|
||||
if (e.key === "Escape" && overlay.style.display === "flex") _closeCalendar();
|
||||
});
|
||||
}
|
||||
|
||||
/* ================================================================== */
|
||||
/* DOM AUTO-WIRING */
|
||||
/* ================================================================== */
|
||||
|
||||
function _wireAll() {
|
||||
/* Trial triggers */
|
||||
var primary = document.getElementById("open-modal");
|
||||
if (primary) {
|
||||
primary.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
show_trial();
|
||||
});
|
||||
}
|
||||
try {
|
||||
document.querySelectorAll(cfg.triggerSelector).forEach(function (el) {
|
||||
if (el.id === "open-modal") return; /* already handled above */
|
||||
el.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
show_trial(el.getAttribute("data-plan") || undefined);
|
||||
});
|
||||
});
|
||||
} catch (err) {
|
||||
console.warn("[mybizapp] invalid triggerSelector:", cfg.triggerSelector, err);
|
||||
}
|
||||
|
||||
/* Calendar triggers */
|
||||
try {
|
||||
document.querySelectorAll(cfg.calendarSelector).forEach(function (el) {
|
||||
el.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
show_calendar();
|
||||
});
|
||||
});
|
||||
} catch (err) {
|
||||
console.warn("[mybizapp] invalid calendarSelector:", cfg.calendarSelector, err);
|
||||
}
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", _wireAll);
|
||||
} else {
|
||||
_wireAll();
|
||||
}
|
||||
|
||||
/* ================================================================== */
|
||||
/* UTILITIES */
|
||||
/* ================================================================== */
|
||||
|
||||
function _esc(str) {
|
||||
return String(str)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """);
|
||||
}
|
||||
|
||||
/* ================================================================== */
|
||||
/* PUBLIC API */
|
||||
/* ================================================================== */
|
||||
|
||||
window.show_trial = show_trial;
|
||||
window.show_calendar = show_calendar;
|
||||
|
||||
})();
|
||||
@@ -0,0 +1,64 @@
|
||||
<div id="tm-overlay" role="dialog" aria-modal="true" aria-labelledby="tm-title">
|
||||
<div id="tm-box">
|
||||
<button id="tm-close" aria-label="Close">×</button>
|
||||
<h2 class="tm-title" id="tm-title">Start Your 4 Weeks Free Trial</h2>
|
||||
<p class="tm-subtitle">Test drive your back-office in a 4-week free trial.</p>
|
||||
<form id="tm-form" novalidate>
|
||||
<div class="tm-grid">
|
||||
<div class="tm-field-group full">
|
||||
<label class="tm-label" for="tm-email">Work Email</label>
|
||||
<input
|
||||
type="email"
|
||||
id="tm-email"
|
||||
name="email"
|
||||
class="tm-field"
|
||||
placeholder="you@company.com"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div class="tm-field-group full tm-select" id="tm-location-select">
|
||||
<label class="tm-label" for="tm-location">Server Location</label>
|
||||
<button
|
||||
type="button"
|
||||
class="tm-field tm-select-btn is-placeholder"
|
||||
id="tm-location-btn"
|
||||
aria-haspopup="listbox"
|
||||
aria-expanded="false"
|
||||
aria-controls="tm-location-menu"
|
||||
>
|
||||
Select your server location
|
||||
</button>
|
||||
<div
|
||||
class="tm-select-menu"
|
||||
id="tm-location-menu"
|
||||
role="listbox"
|
||||
aria-labelledby="tm-location-btn"
|
||||
>
|
||||
<button type="button" class="tm-select-option" data-value="boston">🇺🇸 Boston</button>
|
||||
<button type="button" class="tm-select-option" data-value="manchester">🇬🇧 Manchester</button>
|
||||
<button type="button" class="tm-select-option" data-value="mumbai">🇮🇳 Mumbai</button>
|
||||
<button type="button" class="tm-select-option" data-value="saopaulo">🇧🇷 São Paulo</button>
|
||||
<button type="button" class="tm-select-option" data-value="meppel">🇳🇱 Meppel</button>
|
||||
<button type="button" class="tm-select-option" data-value="sydney">🇦🇺 Sydney</button>
|
||||
</div>
|
||||
<input type="hidden" id="tm-location" name="location" value="" required />
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="tm-product" name="product" value="odoo_19" />
|
||||
<input type="hidden" id="tm-plan" name="plan" value="General Free Trial" />
|
||||
<input type="hidden" name="utm_source" value="" />
|
||||
<input type="hidden" name="utm_medium" value="" />
|
||||
<input type="hidden" name="utm_campaign" value="" />
|
||||
<input type="hidden" name="utm_term" value="" />
|
||||
<input type="hidden" name="utm_content" value="" />
|
||||
<button type="submit" class="tm-submit">Start Free Trial</button>
|
||||
</form>
|
||||
<div id="tm-confirm">
|
||||
<p class="tm-confirm-title">Thank you! 🎉</p>
|
||||
<p class="tm-confirm-sub">
|
||||
We've received your request and a specialist will be in touch within one business day.
|
||||
</p>
|
||||
<button id="tm-confirm-close" class="tm-submit">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
+884
-11
@@ -1,20 +1,893 @@
|
||||
[
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=-2t8tZJYi4U",
|
||||
"creator": "ODOO",
|
||||
"title": "A/B Testing | Odoo Email Marketing",
|
||||
"language": "English"
|
||||
"url": "https://www.youtube.com/watch?v=sBtSYPszKfM",
|
||||
"title": "Make-to-Order (MTO) | Odoo Inventory",
|
||||
"description": "In this video, learn how to manage Make to Order products in Odoo's Manufacturing App.**Check out more Odoo tutorials**Inventory Playlist: https://www.youtub...",
|
||||
"module": "Inventory",
|
||||
"id": 1,
|
||||
"createdAt": "2026-05-03T12:07:17.851Z",
|
||||
"updatedAt": "2026-05-03T12:07:46.694Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=FUhTrqxWnsQ",
|
||||
"creator": "ODOO",
|
||||
"title": "A/B Testing | Odoo Email Marketing",
|
||||
"language": "English"
|
||||
"url": "https://www.youtube.com/watch?v=uPMpMH1A6vk",
|
||||
"title": "Selling products | Odoo Sales",
|
||||
"description": "In this video, learn how to set up your physical and service products in the Sales app.**Check out more Odoo tutorials**- Odoo Accounting - Customer invoice ...",
|
||||
"module": "Sales",
|
||||
"id": 2,
|
||||
"createdAt": "2026-05-03T12:08:36.266Z",
|
||||
"updatedAt": "2026-05-03T12:08:36.266Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=LX_kRgiqUj0",
|
||||
"creator": "ODOO",
|
||||
"url": "https://www.youtube.com/watch?v=kK7IBFi8FEE",
|
||||
"title": "Create your First Sales Quotation | Odoo Sales",
|
||||
"description": "In this video, you'll discover how easy it is to create your very first quotation with Odoo Sales!**Timestamps:** Introduction: 00:00 - 00:41Configuration - ...",
|
||||
"module": "Sales",
|
||||
"id": 3,
|
||||
"createdAt": "2026-05-03T12:08:49.858Z",
|
||||
"updatedAt": "2026-05-03T12:08:49.858Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=nJ2grHTSOwo",
|
||||
"title": "Reordering Rules | Odoo Inventory",
|
||||
"description": "In this video, learn how to use automatic and manual reordering rules to automatically track and reorder inventory based on stock levels with the Odoo Invent...",
|
||||
"module": "Inventory",
|
||||
"id": 4,
|
||||
"createdAt": "2026-05-03T12:09:29.418Z",
|
||||
"updatedAt": "2026-05-03T12:09:29.418Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=t5pyxwbDG6Q",
|
||||
"title": "Product Packaging | Odoo Inventory",
|
||||
"description": "In this video, learn how to create packagings for sale or purchase, and sell products using that packaging.**Check out more Odoo tutorials**- Units of Measur...",
|
||||
"module": "Inventory",
|
||||
"id": 5,
|
||||
"createdAt": "2026-05-03T12:09:37.142Z",
|
||||
"updatedAt": "2026-05-03T12:09:37.142Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=EQMjhnHTV5s",
|
||||
"title": "Bill of Materials Basics | Odoo MRP",
|
||||
"description": "In this video, learn how to configure a bill of materials and use it to create manufacturing orders with Odoo Manufacturing**Check out more Odoo tutorials**-...",
|
||||
"module": "Manufacturing",
|
||||
"id": 6,
|
||||
"createdAt": "2026-05-03T12:09:48.885Z",
|
||||
"updatedAt": "2026-05-03T12:09:48.885Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=njUpZPk4VNo",
|
||||
"title": "Bill splitting | Odoo Point of Sale",
|
||||
"description": "Learn how to split an order.- Test your knowledge on bill splitting: https://www.odoo.com/slides/slide/bill-splitting-13272- Expand your knowledge on Point o...",
|
||||
"module": "Point of Sale",
|
||||
"id": 7,
|
||||
"createdAt": "2026-05-03T12:10:00.530Z",
|
||||
"updatedAt": "2026-05-03T12:10:00.530Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=5W2S9HwSrDQ",
|
||||
"title": "Courses | Odoo Point of Sale",
|
||||
"description": "Learn how to split your order into meal courses. - Test your knowledge on courses: https://www.odoo.com/slides/slide/courses-13271- Expand your knowledge on ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 8,
|
||||
"createdAt": "2026-05-03T12:10:13.167Z",
|
||||
"updatedAt": "2026-05-03T12:10:13.167Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=y3ZVeeM3WEc",
|
||||
"title": "CRM Leads from Websites | Odoo CRM",
|
||||
"description": "In this video, learn how to configure a \"Contact Us\" web form that will automatically create leads and opportunities for your sales team. See how Odoo's CRM ...",
|
||||
"module": "CRM",
|
||||
"id": 9,
|
||||
"createdAt": "2026-05-03T12:10:23.538Z",
|
||||
"updatedAt": "2026-05-03T12:10:23.538Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=u6kfb1oyneU",
|
||||
"title": "Won and Lost Opportunities | Odoo CRM",
|
||||
"description": "In this video, learn how to mark opportunities won and lost, restore lost opportunities, and how Odoo AI learns from your data, all with Odoo CRM.Intro: 0:00...",
|
||||
"module": "CRM",
|
||||
"id": 10,
|
||||
"createdAt": "2026-05-03T12:11:25.623Z",
|
||||
"updatedAt": "2026-05-03T12:11:25.623Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=w_DKgHcIV0U",
|
||||
"title": "Receipts and Invoices | Odoo Point of Sale",
|
||||
"description": "YouTube descriptionLearn how to configure how receipts and invoices are generated and delivered to your customers.- Test your knowledge on receipts and invoi...",
|
||||
"module": "Point of Sale",
|
||||
"id": 11,
|
||||
"createdAt": "2026-05-03T12:12:07.337Z",
|
||||
"updatedAt": "2026-05-03T12:12:07.337Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=cX0Q_G7b9Vo",
|
||||
"title": "FEFO Removal Strategy | Odoo Inventory",
|
||||
"description": "Learn how to set up and use the first expired, first out (FEFO) removal strategy to streamline your picking process in Odoo.00:00 - 01:28 Introduction01:29 -...",
|
||||
"module": "Inventory",
|
||||
"id": 12,
|
||||
"createdAt": "2026-05-03T12:13:21.779Z",
|
||||
"updatedAt": "2026-05-03T12:13:21.779Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=mTXTgpBuLBY",
|
||||
"title": "Manage presets | Odoo Point of Sale",
|
||||
"description": "Learn how to create, use, edit, and manage presets in your retail or restaurant point of sale, which is useful for handling different order types.- Test your...",
|
||||
"module": "Point of Sale",
|
||||
"id": 13,
|
||||
"createdAt": "2026-05-03T12:14:10.568Z",
|
||||
"updatedAt": "2026-05-03T12:14:10.568Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=H8e2CakLhaQ",
|
||||
"title": "Product combos | Odoo Point of Sale",
|
||||
"description": "Learn how to create product combos and cater to your customers with special offers.- Test your knowledge on product combos: https://www.odoo.com/slides/slide...",
|
||||
"module": "Point of Sale",
|
||||
"id": 14,
|
||||
"createdAt": "2026-05-03T12:14:33.408Z",
|
||||
"updatedAt": "2026-05-03T12:14:33.408Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=UUGbGjRvXtg",
|
||||
"title": "Work Center Basics | Odoo MRP",
|
||||
"description": "In this video, learn how to configure work centers in the Odoo manufacturing app.Intro: 0:00Work Centers Overview: 0:56Creating a new work center: 1:55Conclu...",
|
||||
"module": "Manufacturing",
|
||||
"id": 15,
|
||||
"createdAt": "2026-05-03T12:14:45.352Z",
|
||||
"updatedAt": "2026-05-03T12:14:45.352Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=wE3-a6uLPCs",
|
||||
"title": "Odoo Quick Tips - Filter on quotations [Sales]",
|
||||
"description": "Odoo is a modern Sales management software. So clean that you will experience work differently and avoid the frustration of slow interfaces, overflowing emai...",
|
||||
"module": "Sales",
|
||||
"id": 16,
|
||||
"createdAt": "2026-05-03T12:14:57.660Z",
|
||||
"updatedAt": "2026-05-03T12:14:57.660Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=5Bl60GkEa50",
|
||||
"title": "Manage your shop with Odoo Point of Sale",
|
||||
"description": "Odoo Point of Sale helps retailers manage daily operations with ease: create product combos, use presets for dine-in or takeout orders, handle bookings and s...",
|
||||
"module": "Point of Sale",
|
||||
"id": 17,
|
||||
"createdAt": "2026-05-03T12:15:08.865Z",
|
||||
"updatedAt": "2026-05-03T12:15:08.865Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=6_mi7NKfzpA",
|
||||
"title": "Inventory Basics: Receive and Store Stock | Odoo Inventory",
|
||||
"description": "In this video, learn how to set up products & locations to receive and store your items in Odoo Inventory. **Check out more Odoo tutorials**- Locations and W...",
|
||||
"module": "Inventory",
|
||||
"id": 18,
|
||||
"createdAt": "2026-05-03T12:15:20.730Z",
|
||||
"updatedAt": "2026-05-03T12:15:20.730Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=nz1Psvi7xc4&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Odoo Quick Tips - Preset settings [POS]",
|
||||
"description": "Odoo Point of Sale is your free, user-friendly POS system to run your store or restaurant efficiently. Set it up in minutes, and sell in seconds! Odoo Point ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 19,
|
||||
"createdAt": "2026-05-03T12:15:52.230Z",
|
||||
"updatedAt": "2026-05-03T12:15:52.230Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=Q1GTp2i_d_4",
|
||||
"title": "Importing and Exporting Data | Getting Started",
|
||||
"description": "In this video, learn how to import and export data in Odoo. Intro: 0:00Download data / export template: 0:44Data file / template: 3:01Importing data: 3:23Con...",
|
||||
"module": "Inventory",
|
||||
"id": 20,
|
||||
"createdAt": "2026-05-03T12:16:09.213Z",
|
||||
"updatedAt": "2026-05-03T12:16:09.213Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=D01_EK-Fz7U",
|
||||
"title": "Filters and Views | Getting Started",
|
||||
"description": "In this video, learn how to use Odoos filtering and views to manage how information appears per app. **Check out more Odoo tutorials**- Create an Odoo Databa...",
|
||||
"module": "CRM",
|
||||
"id": 21,
|
||||
"createdAt": "2026-05-03T12:16:26.269Z",
|
||||
"updatedAt": "2026-05-03T12:16:26.269Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=vyvFgOfBoPI&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Schedule Activities | Getting Started",
|
||||
"description": "In this video, learn how to schedule activities in Odoo from the chatter and Kanban view. We'll also touch on activity types, triggering activities, and crea...",
|
||||
"module": "CRM",
|
||||
"id": 22,
|
||||
"createdAt": "2026-05-03T12:16:40.764Z",
|
||||
"updatedAt": "2026-05-03T12:16:40.764Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=bPxCRbrbWys",
|
||||
"title": "Contacts | Getting Started",
|
||||
"description": "In this video, learn how to manage contacts in Odoo.Intro: 0:00Contact display views 0:42Company contact card: 2:07Creating associated contacts: 2:52Sales & ...",
|
||||
"module": "CRM",
|
||||
"id": 23,
|
||||
"createdAt": "2026-05-03T12:16:53.008Z",
|
||||
"updatedAt": "2026-05-03T12:16:53.008Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=MhdujxMpSDU",
|
||||
"title": "Access Rights for Sales Teams | Getting Started",
|
||||
"description": "In this video, learn how to configure access rights for your sales team.Intro- 00:00Setup sales manager- 00:47Setup salesperson- 03:43Workflow #1- 05:35Workf...",
|
||||
"module": "Sales",
|
||||
"id": 24,
|
||||
"createdAt": "2026-05-03T12:17:04.463Z",
|
||||
"updatedAt": "2026-05-03T12:17:04.463Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=shC0LJAhSDQ",
|
||||
"title": "Point of Sale: Customer Display",
|
||||
"description": "See how to easily configure a customer display for Odoo POS, whether locally, remotely, or via IoT, and elevate your retail checkout experience. You can also...",
|
||||
"module": "Point of Sale",
|
||||
"id": 25,
|
||||
"createdAt": "2026-05-03T12:17:14.123Z",
|
||||
"updatedAt": "2026-05-03T12:17:14.123Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=QKM6E9y70lY",
|
||||
"title": "Odoo Repairs App Tour | Finally build your RMA pipeline, enhance SLAs, and more!",
|
||||
"description": "*Odoo’s Customer Service Solution for Physical Products*Use the Odoo Repairs application to _finally_ build a structured RMA process for your business by int...",
|
||||
"module": "Inventory",
|
||||
"id": 26,
|
||||
"createdAt": "2026-05-03T12:17:36.024Z",
|
||||
"updatedAt": "2026-05-03T12:17:36.024Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=4IOZBGZSZII",
|
||||
"title": "Odoo Quick Tips - Partial payments [Sales]",
|
||||
"description": "With Odoo Sales, clients can pay a down payment directly from their portal using their favorite payment method. Once confirmed, the sales order updates autom...",
|
||||
"module": "Sales",
|
||||
"id": 27,
|
||||
"createdAt": "2026-05-03T12:17:49.457Z",
|
||||
"updatedAt": "2026-05-03T12:17:49.457Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=5RkyU-hhr2M",
|
||||
"title": "Point of Sale: Stripe",
|
||||
"description": "Discover how to connect and configure Stripe terminals with Odoo for fast, secure, and fully integrated payments. Step-by-step setup, live demo, and troubles...",
|
||||
"module": "Point of Sale",
|
||||
"id": 28,
|
||||
"createdAt": "2026-05-03T12:17:59.732Z",
|
||||
"updatedAt": "2026-05-03T12:17:59.732Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=Ls3sjiqHCHE",
|
||||
"title": "Odoo Discuss: Direct Messages | Getting Started",
|
||||
"description": "In this video, learn how to send direct messages to other database users with Odoo Discuss.Intro: 0:00Direct Messages in Apps: 0:52Discuss App Walkthrough: 2...",
|
||||
"module": "Email Marketing",
|
||||
"id": 29,
|
||||
"createdAt": "2026-05-03T12:18:15.545Z",
|
||||
"updatedAt": "2026-05-03T12:18:15.545Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=Wx2nqGOJwZI",
|
||||
"title": "Odoo Quick Tips - Create a talent pool [Recruitment]",
|
||||
"description": "Streamline your customer support! ⚡ Discover how to easily create a talent pool in the Odoo Recruitment app.Try it now! https://odoo.com/trial Master Odoo an...",
|
||||
"module": "CRM",
|
||||
"id": 30,
|
||||
"createdAt": "2026-05-03T12:18:26.746Z",
|
||||
"updatedAt": "2026-05-03T12:18:26.746Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=cXHGO6080dI",
|
||||
"title": "Packages | Odoo Inventory",
|
||||
"description": "In this video, learn how to do use packages to move, store, and track products throughout your warehouse!Introduction - 0:00Configuration - 1:13Putting Produ...",
|
||||
"module": "Inventory",
|
||||
"id": 31,
|
||||
"createdAt": "2026-05-03T12:19:04.696Z",
|
||||
"updatedAt": "2026-05-03T12:19:04.696Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=1o9nfaimSUY",
|
||||
"title": "Odoo Quick Tips - Meal courses [Point of Sale]",
|
||||
"description": "Divide a full order into courses and serve each one at a time. A step-by-step approach to delivering exceptional customer experiences.With Odoo Point of Sale...",
|
||||
"module": "Point of Sale",
|
||||
"id": 32,
|
||||
"createdAt": "2026-05-03T12:19:35.410Z",
|
||||
"updatedAt": "2026-05-03T12:19:35.410Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=fge0ttQ94Xg",
|
||||
"title": "Purchase Basics: Paying your First Vendor | Odoo Purchase",
|
||||
"description": "In this video, learn how to pay your vendors for goods you have purchased. Intro- 00:00Configuration- 00:44Order Products- 02:17Bill Matching- 04:12Conclusio...",
|
||||
"module": "Purchase",
|
||||
"id": 33,
|
||||
"createdAt": "2026-05-03T12:19:44.759Z",
|
||||
"updatedAt": "2026-05-03T12:19:44.759Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=LX_kRgiqUj0&t=2s",
|
||||
"title": "Purchase and RFQ Basics | Odoo Purchase",
|
||||
"language": "English"
|
||||
"description": "In this video, learn about the essentials of the Purchase app, starting with creating a request for quotation.Intro- 00:00Create an RFQ- 01:05Receive Product...",
|
||||
"module": "Purchase",
|
||||
"id": 34,
|
||||
"createdAt": "2026-05-03T12:19:53.709Z",
|
||||
"updatedAt": "2026-05-03T12:19:53.709Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=pdtrg1Lt-FQ",
|
||||
"title": "Self-ordering kiosk | Odoo Point of Sale",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 35,
|
||||
"createdAt": "2026-05-03T12:20:08.478Z",
|
||||
"updatedAt": "2026-05-03T12:20:08.478Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=nN0YiLXjr3c",
|
||||
"title": "Online food delivery | Odoo Point of Sale",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 36,
|
||||
"createdAt": "2026-05-03T12:20:57.823Z",
|
||||
"updatedAt": "2026-05-03T12:20:57.823Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=rQrjFex8-yg",
|
||||
"title": "Refund customers | Odoo Point of Sale",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 37,
|
||||
"createdAt": "2026-05-03T12:22:11.854Z",
|
||||
"updatedAt": "2026-05-03T12:22:11.854Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=NHavJVhmibM",
|
||||
"title": "Milestones | Odoo Project & Timesheets",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/In this video, ...",
|
||||
"module": "Project",
|
||||
"id": 38,
|
||||
"createdAt": "2026-05-03T12:22:44.264Z",
|
||||
"updatedAt": "2026-05-03T12:22:44.264Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=alUnAL4PNDw",
|
||||
"title": "Expiration Dates | Odoo Inventory",
|
||||
"description": "In this video, learn how to do manage perishable products in inventory with expiration dates and the FEFO (First Expired, First Out) removal strategy.0:00 - ...",
|
||||
"module": "Inventory",
|
||||
"id": 39,
|
||||
"createdAt": "2026-05-03T12:22:53.027Z",
|
||||
"updatedAt": "2026-05-03T12:22:53.027Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=Gqubs1XmwU4",
|
||||
"title": "Odoo Quick Tips - Leads priority filter [CRM]",
|
||||
"description": "Assign leads effectively so you don't miss any opportunity! Odoo CRM is the best tool to handle your pipeline. It's open-source, fun, and full of great featu...",
|
||||
"module": "CRM",
|
||||
"id": 40,
|
||||
"createdAt": "2026-05-03T12:23:02.410Z",
|
||||
"updatedAt": "2026-05-03T12:23:02.410Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=GDXS6lnD8cQ",
|
||||
"title": "Task dependencies | Odoo Project & Timesheets",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Project",
|
||||
"id": 41,
|
||||
"createdAt": "2026-05-03T12:23:57.166Z",
|
||||
"updatedAt": "2026-05-03T12:23:57.166Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=ZfixUdS64j8",
|
||||
"title": "Basic Warehouse Setup | Odoo Inventory",
|
||||
"description": "In this video, compare how various inbound and outbound inventory flows affect efficiency, accountability, and team roles in a warehouse.0:00 - Intro1:00 - T...",
|
||||
"module": "Inventory",
|
||||
"id": 42,
|
||||
"createdAt": "2026-05-03T12:24:33.687Z",
|
||||
"updatedAt": "2026-05-03T12:24:33.687Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=b5eVusXHEvg",
|
||||
"title": "Product creation | Odoo Point of Sale",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 43,
|
||||
"createdAt": "2026-05-03T12:24:43.442Z",
|
||||
"updatedAt": "2026-05-03T12:24:43.442Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=B4iSBSeSK24",
|
||||
"title": "Re-invoice Expenses | Odoo Expenses",
|
||||
"description": "In this video, learn how to re-invoice expenses in the Expenses app, to charge expenses to accounts in the database.Chapters:00:00 Intro01:12 Configure Expen...",
|
||||
"module": "Expenses",
|
||||
"id": 44,
|
||||
"createdAt": "2026-05-03T12:25:06.016Z",
|
||||
"updatedAt": "2026-05-03T12:25:06.016Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=XVhrrXhenwY",
|
||||
"title": "Manage your floors and tables | Odoo Point of Sale",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 45,
|
||||
"createdAt": "2026-05-03T12:25:16.373Z",
|
||||
"updatedAt": "2026-05-03T12:25:16.373Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=C10IWU7oEQU",
|
||||
"title": "Set up pricelists | Odoo Point of Sale",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Point of Sale",
|
||||
"id": 46,
|
||||
"createdAt": "2026-05-03T12:25:27.382Z",
|
||||
"updatedAt": "2026-05-03T12:25:27.382Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=hAomtwNerdM",
|
||||
"title": "Manage Accidents | Odoo Human Resources",
|
||||
"description": "In this video, learn how to manage accidents, including servicing and repairs, in the Fleet app.Chapters:00:00 Intro00:40 Structure and Theory01:34 Log an Ac...",
|
||||
"module": "Risk Management",
|
||||
"id": 47,
|
||||
"createdAt": "2026-05-03T12:25:37.110Z",
|
||||
"updatedAt": "2026-05-03T12:25:37.110Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=vSOihwvGf_4",
|
||||
"title": "Fleet Reporting | Odoo Human Resources",
|
||||
"description": "In this video, learn how to manage accidents, including servicing and repairs, in the Fleet app.**Check out more Odoo tutorials**- HR playlist: https://www.y...",
|
||||
"module": "Expenses",
|
||||
"id": 48,
|
||||
"createdAt": "2026-05-03T12:25:58.451Z",
|
||||
"updatedAt": "2026-05-03T12:25:58.451Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=qcCQOCjGvT0",
|
||||
"title": "Managing Orders | Odoo Lunch",
|
||||
"description": "In this video, learn the process of managing lunch orders and employee accounts.**Check out more Odoo tutorials**- HR playlist: https://www.youtube.com/playl...",
|
||||
"module": "Restaurant",
|
||||
"id": 49,
|
||||
"createdAt": "2026-05-03T12:26:14.310Z",
|
||||
"updatedAt": "2026-05-03T12:26:14.310Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=ie9X1MNUFcs&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Add Vehicles | Odoo Human Resources",
|
||||
"description": "In this video, learn how to add vehicles in the Fleet app.**Check out more Odoo tutorials**- HR playlist: https://www.youtube.com/playlist?list=PL1-aSABtP6AB...",
|
||||
"module": "Expenses",
|
||||
"id": 50,
|
||||
"createdAt": "2026-05-03T12:26:30.712Z",
|
||||
"updatedAt": "2026-05-03T12:26:30.712Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=8yzslSQbg-s",
|
||||
"title": "Project stages and status | Odoo Project",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Project",
|
||||
"id": 51,
|
||||
"createdAt": "2026-05-03T12:26:41.918Z",
|
||||
"updatedAt": "2026-05-03T12:26:41.918Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=EECmL6Xs-oQ",
|
||||
"title": "Customize your project | Odoo Project",
|
||||
"description": "Learn everything you need to grow your business with Odoo, the best open-source management software to run a company, at https://www.odoo.com/slides.In this ...",
|
||||
"module": "Project",
|
||||
"id": 52,
|
||||
"createdAt": "2026-05-03T12:26:50.948Z",
|
||||
"updatedAt": "2026-05-03T12:26:50.948Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=-xHbo21qjJI",
|
||||
"title": "Interview Forms | Odoo Human Resources",
|
||||
"description": "In this video, learn how to screen applicants in the Recruitment app with customized interview forms!**Check out more Odoo tutorials**- HR playlist: https://...",
|
||||
"module": "Website",
|
||||
"id": 53,
|
||||
"createdAt": "2026-05-03T12:27:32.514Z",
|
||||
"updatedAt": "2026-05-03T12:27:32.514Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=_tGbu-b1bIc&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Schedule Interviews | Odoo Human Resources",
|
||||
"description": "In this video, learn how to schedule interviews with applicants in the Recruitment app.**Check out more Odoo tutorials**- HR playlist: https://www.youtube.co...",
|
||||
"module": "Timesheets",
|
||||
"id": 54,
|
||||
"createdAt": "2026-05-03T12:27:47.417Z",
|
||||
"updatedAt": "2026-05-03T12:27:47.417Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=bUcuZork1XY&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Manage Accidents | Odoo Human Resources",
|
||||
"description": "In this video, learn how to log accidents and the required repairs, and view accident data.**Check out more Odoo tutorials**- Fleet Basics: https://www.youtu...",
|
||||
"module": "Risk Management",
|
||||
"id": 55,
|
||||
"createdAt": "2026-05-03T12:28:31.340Z",
|
||||
"updatedAt": "2026-05-03T12:28:31.340Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=O-ruLrLXoNE",
|
||||
"title": "Applicant Skills | Odoo Human Resources",
|
||||
"description": "In this video, learn the basics of the Recruitment app, and how to go through a recruitment flow.Chapters:00:00 Introduction00:34 View Skill Types01:29 Add a...",
|
||||
"module": "Project",
|
||||
"id": 56,
|
||||
"createdAt": "2026-05-03T12:28:48.483Z",
|
||||
"updatedAt": "2026-05-03T12:28:48.483Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=zjUHM0TSKZ0",
|
||||
"title": "Gift Card Programs | Odoo Sales",
|
||||
"description": "In this video, learn how to create gift card programs so you can offer gift cards to your customers!**Check out more Odoo tutorials**- Sales: https://www.you...",
|
||||
"module": "Sales",
|
||||
"id": 57,
|
||||
"createdAt": "2026-05-03T12:28:59.116Z",
|
||||
"updatedAt": "2026-05-03T12:28:59.116Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=_MkDQ7hrDn0",
|
||||
"title": "Lunch Basics | Odoo Lunch",
|
||||
"description": "In this video, learn how to configure and setup your Lunch app. Learn how to add vendors and products, set up your locations and product categories, and crea...",
|
||||
"module": "Restaurant",
|
||||
"id": 58,
|
||||
"createdAt": "2026-05-03T12:29:29.880Z",
|
||||
"updatedAt": "2026-05-03T12:29:29.880Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=CymB_sD11bI",
|
||||
"title": "Loyalty Programs | Odoo Sales",
|
||||
"description": "In this video, learn how to create Loyalty Programs in Odoo, as well as how to apply rewards to sales orders!TIMESTAMPS00:00 INTRO01:04 Configure Promotions,...",
|
||||
"module": "Sales",
|
||||
"id": 59,
|
||||
"createdAt": "2026-05-03T12:30:23.123Z",
|
||||
"updatedAt": "2026-05-03T12:30:23.123Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=MD8gRS9hWso&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Email Marketing Essentials | Odoo Email Marketing",
|
||||
"description": "In this video, learn how to do edit and create new email marketing templates in Odoo's Email Marketing app.TIMESTAMPS00:00 INTRO00:44 Mailings Dashboard01:46...",
|
||||
"module": "Email Marketing",
|
||||
"id": 60,
|
||||
"createdAt": "2026-05-03T12:30:42.132Z",
|
||||
"updatedAt": "2026-05-03T12:30:42.132Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=FUhTrqxWnsQ&t=3s",
|
||||
"title": "A/B Testing | Odoo Email Marketing",
|
||||
"description": "In this video, learn how to do edit and create new email marketing templates in Odoo's Email Marketing app.TIMESTAMPS00:00 INTRO00:56 Email Marketing Predica...",
|
||||
"module": "Email Marketing",
|
||||
"id": 61,
|
||||
"createdAt": "2026-05-03T12:30:56.983Z",
|
||||
"updatedAt": "2026-05-03T12:30:56.983Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=T45Jo3s_Pt4",
|
||||
"title": "Odoo Project - For efficient project management",
|
||||
"description": "Odoo is the ultimate project management software. Organize tasks and stakeholders, get a comprehensive overview of your project, and boost team productivity ...",
|
||||
"module": "Project",
|
||||
"id": 62,
|
||||
"createdAt": "2026-05-03T12:31:07.645Z",
|
||||
"updatedAt": "2026-05-03T12:31:07.645Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=Xn9_LuE9Hio",
|
||||
"title": "Approvals Management | Odoo Approvals",
|
||||
"description": "In this video, learn how to manage all requests in the Approvals app, and follow up on your own.**Check out more Odoo tutorials**- Approvals Basics: (add aft...",
|
||||
"module": "Expenses",
|
||||
"id": 63,
|
||||
"createdAt": "2026-05-03T12:31:24.364Z",
|
||||
"updatedAt": "2026-05-03T12:31:24.364Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=_A_kyDcf-CU",
|
||||
"title": "Odoo Quick Tips - Bill splitting [Point of Sales]",
|
||||
"description": "Odoo Point of Sale is your free, user-friendly POS system to run your store or restaurant efficiently. Set it up in minutes and sell in seconds! Odoo Point o...",
|
||||
"module": "Point of Sale",
|
||||
"id": 64,
|
||||
"createdAt": "2026-05-03T12:31:43.188Z",
|
||||
"updatedAt": "2026-05-03T12:31:43.188Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=T-Cjbx3Ie3g",
|
||||
"title": "Business Flow: Restaurant",
|
||||
"description": "In this video, learn how to use the Odoo Planning app for employee schedule management, then use the Odoo POS app to manage your restaurant ordering system. ...",
|
||||
"module": "Restaurant",
|
||||
"id": 65,
|
||||
"createdAt": "2026-05-03T12:31:54.859Z",
|
||||
"updatedAt": "2026-05-03T12:31:54.859Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=bVbR3tqTHpQ",
|
||||
"title": "Onboarding | Odoo Employees",
|
||||
"description": "In this video, learn how to add new employees and configure all their information.**Check out more Odoo tutorials**- Employees Basics: https://www.youtube.co...",
|
||||
"module": "Timesheets",
|
||||
"id": 66,
|
||||
"createdAt": "2026-05-03T12:32:12.817Z",
|
||||
"updatedAt": "2026-05-03T12:32:12.817Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=pPNuQNZzSLY",
|
||||
"title": "CRM Scheduling Activities | Odoo CRM",
|
||||
"description": "In this video, learn how to schedule activities on Odoo's CRM app! We'll walk you through creating an activity from a sales opportunity as well coordinating ...",
|
||||
"module": "CRM",
|
||||
"id": 67,
|
||||
"createdAt": "2026-05-03T12:32:31.075Z",
|
||||
"updatedAt": "2026-05-03T12:32:31.075Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=NRd9igxqhXs",
|
||||
"title": "Email Marketing Templates | Odoo Email Marketing",
|
||||
"description": "In this video, learn how to edit email marketing templates in Odoo's Email Marketing app.**Check out more Odoo tutorials**- Email Marketing playlist: https:/...",
|
||||
"module": "Email Marketing",
|
||||
"id": 68,
|
||||
"createdAt": "2026-05-03T12:32:42.565Z",
|
||||
"updatedAt": "2026-05-03T12:32:42.565Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=J65h3-WFIKU",
|
||||
"title": "By-Products | Odoo MRP",
|
||||
"description": "In this video, learn how to specify by-products on a bill of materials, produce them during the manufacturing process, and track the quantity created.0:00 In...",
|
||||
"module": "Manufacturing",
|
||||
"id": 69,
|
||||
"createdAt": "2026-05-03T12:32:54.016Z",
|
||||
"updatedAt": "2026-05-03T12:32:54.016Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=nygxaH6ghSo",
|
||||
"title": "Odoo Quick Tips - Inform your customers when a product is back in stock [eCommerce]",
|
||||
"description": "Want to inform your customer when a product is back in stock? Easy 🚀Odoo eCommerce is the best eCommerce solution. It's free, open-source, fun, and full of ...",
|
||||
"module": "eCommerce",
|
||||
"id": 70,
|
||||
"createdAt": "2026-05-03T12:33:12.691Z",
|
||||
"updatedAt": "2026-05-03T12:33:12.691Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=xbyPsjIfylk",
|
||||
"title": "Odoo CRM App Tour | The World's #1 Open-source Customer Relationship Management Software",
|
||||
"description": "*Enterprise-level CRM Software that packs a PUNCH*The CRM application is where it all starts in Odoo— through the CRM, all other customer-related operations ...",
|
||||
"module": "CRM",
|
||||
"id": 71,
|
||||
"createdAt": "2026-05-03T12:34:13.251Z",
|
||||
"updatedAt": "2026-05-03T12:34:13.251Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=UeFHEUgmg7A",
|
||||
"title": "Odoo Quick Tips - Hide your shop to logged out users [eCommerce]",
|
||||
"description": "Odoo {eCommerce} is the best tool to display and sell your products. It's open-source, fun, and full of great features!Try it now! https://www.odoo.com/r/J...",
|
||||
"module": "eCommerce",
|
||||
"id": 72,
|
||||
"createdAt": "2026-05-03T12:34:46.227Z",
|
||||
"updatedAt": "2026-05-03T12:34:46.227Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=8mdNH6WmvI4",
|
||||
"title": "Odoo Quick Tips - Prevent the sale of zero-priced products [eCommerce]",
|
||||
"description": "Odoo {eCommerce} is the best tool to display and sell your products. It's open-source, fun, and full of great features!Try it now! https://www.odoo.com/r/J...",
|
||||
"module": "eCommerce",
|
||||
"id": 73,
|
||||
"createdAt": "2026-05-03T12:35:03.999Z",
|
||||
"updatedAt": "2026-05-03T12:35:03.999Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=M-wx4LkNQZI",
|
||||
"title": "Odoo Quick Tips - Restrict product categories [Point of Sales]",
|
||||
"description": "Odoo Point of Sale is your free, user-friendly POS system to run your store or restaurant efficiently. Set it up in minutes and sell in seconds! Odoo Point o...",
|
||||
"module": "Point of Sale",
|
||||
"id": 74,
|
||||
"createdAt": "2026-05-03T12:35:15.047Z",
|
||||
"updatedAt": "2026-05-03T12:35:15.047Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=qybxkC1tENs",
|
||||
"title": "Blanket Orders | Odoo Purchase",
|
||||
"description": "In this video, learn how to manage recurring orders from a single supplier using blanket orders.0:00 - Introduction0:54 - Create blanket order2:55 - Create R...",
|
||||
"module": "Purchase",
|
||||
"id": 75,
|
||||
"createdAt": "2026-05-03T12:35:46.995Z",
|
||||
"updatedAt": "2026-05-03T12:35:46.995Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=pUvFVU5U5Pc&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Purchase Basics and Your First Request for Quotation | Odoo Purchase",
|
||||
"description": "In this video, learn about the essentials of the Purchase app, starting with the creation of a request for quotation.0:00 - Introduction0:49 - Purchase App D...",
|
||||
"module": "Purchase",
|
||||
"id": 76,
|
||||
"createdAt": "2026-05-03T12:35:59.157Z",
|
||||
"updatedAt": "2026-05-03T12:35:59.157Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=pAp5Oy4EY34",
|
||||
"title": "Save Hours Importing Contacts in Odoo",
|
||||
"description": "Import Your Contacts the Easy Way-https://odooaiops.com/Meet with Me - https://www.odooityourself.com/meet-with-meGet Weekly Tips and Tricks - https://www.od...",
|
||||
"module": "CRM",
|
||||
"id": 77,
|
||||
"createdAt": "2026-05-03T12:36:13.185Z",
|
||||
"updatedAt": "2026-05-03T12:36:13.185Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=dLP_Lm3YNQU",
|
||||
"title": "What is ERP (Enterprise Resource Planning system)?",
|
||||
"description": "What exactly is an ERP? Explaining what an ERP or Enterprise Resource Planning software or system is, actually isn't all that involved. The basic concept i...",
|
||||
"module": "Inventory",
|
||||
"id": 78,
|
||||
"createdAt": "2026-05-03T12:36:31.056Z",
|
||||
"updatedAt": "2026-05-03T12:36:31.056Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=0QR3S43UD4I",
|
||||
"title": "How Odoo Connects All Your Data (Simply Explained)",
|
||||
"description": "Need help setting up Odoo? Let's talk! https://www.odooityourself.com/r/fI1You don't need to be an expert with relational databases to understand and use Od...",
|
||||
"module": "Sales",
|
||||
"id": 79,
|
||||
"createdAt": "2026-05-03T12:36:49.291Z",
|
||||
"updatedAt": "2026-05-03T12:36:49.291Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=wAHNnreO_8I",
|
||||
"title": "Save Time in ODOO by Importing Your Sales Orders",
|
||||
"description": "Get your questions answered!https://www.odooityourself.com/meet-with-meJoin one of my classes!https://odooityourself.com/slides/odoo-bookkeeping-1So somehow ...",
|
||||
"module": "Sales",
|
||||
"id": 80,
|
||||
"createdAt": "2026-05-03T12:37:01.916Z",
|
||||
"updatedAt": "2026-05-03T12:37:01.916Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=4g7yogHE7Tc",
|
||||
"title": "Adding Photos to Multiple Products at Once in Odoo",
|
||||
"description": "Get your questions answered!https://www.odooityourself.com/meet-with-meJoin one of my classes!https://odooityourself.com/slides/odoo-bookkeeping-1If you have...",
|
||||
"module": "Inventory",
|
||||
"id": 81,
|
||||
"createdAt": "2026-05-03T12:37:13.432Z",
|
||||
"updatedAt": "2026-05-03T12:37:13.432Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=BfBEtqlNl-s",
|
||||
"title": "Odoo Sales Orders Deep Dive",
|
||||
"description": "Get your questions answered!https://www.odooityourself.com/meet-with-meA sales order is where so many processes start in Odoo. So you may well ask, why haven...",
|
||||
"module": "Sales",
|
||||
"id": 82,
|
||||
"createdAt": "2026-05-03T12:37:47.958Z",
|
||||
"updatedAt": "2026-05-03T12:37:47.958Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=WGNPk0VsySY",
|
||||
"title": "ODOO Community Edition vs ODOO Enterprise Edition",
|
||||
"description": "Need some help getting Odoo setup? Let's talk! https://www.odooityourself.com/r/3NRJoin One of My Classes - https://odooityourself.com/slides/odoo-bookkeepi...",
|
||||
"module": "Website",
|
||||
"id": 83,
|
||||
"createdAt": "2026-05-03T12:38:08.507Z",
|
||||
"updatedAt": "2026-05-03T12:38:08.507Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=5WuqS3CtYJ0",
|
||||
"title": "Send the Right Emails to the Right Person in ODOO",
|
||||
"description": "Making sure that all the emails related to sales or all the invoices go to the correct person at the company you're interacting with can be a pain in ODOO. ...",
|
||||
"module": "Email Marketing",
|
||||
"id": 84,
|
||||
"createdAt": "2026-05-03T12:38:19.371Z",
|
||||
"updatedAt": "2026-05-03T12:38:19.371Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=zQ5sByYQXZs",
|
||||
"title": "Limit Contacts Visible to Salesperson in ODOO",
|
||||
"description": "The contacts we have in ODOO are super valuable to us. Keeping that information on a need to know basis can be incredibly important. Making it so a salespe...",
|
||||
"module": "CRM",
|
||||
"id": 85,
|
||||
"createdAt": "2026-05-03T12:38:39.458Z",
|
||||
"updatedAt": "2026-05-03T12:38:39.458Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=FSoSwikZAGk",
|
||||
"title": "Learn How to Send KPIs and Updates Seamlessly: Digest Emails in ODOO",
|
||||
"description": "In today's fast-paced business environment, staying on top of key performance indicators (KPIs) and updates is crucial for informed decision-making. With ODO...",
|
||||
"module": "Email Marketing",
|
||||
"id": 86,
|
||||
"createdAt": "2026-05-03T12:38:53.525Z",
|
||||
"updatedAt": "2026-05-03T12:38:53.525Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=uf_bMWNRtJY",
|
||||
"title": "Supercharge Your Digest Email with Custom KPIs in ODOO",
|
||||
"description": "Digest emails in ODOO are great and they give you a lot of base KPIs, but a lot of times your company has different metrics they want to track. No sweat, I ...",
|
||||
"module": "Email Marketing",
|
||||
"id": 87,
|
||||
"createdAt": "2026-05-03T12:39:12.857Z",
|
||||
"updatedAt": "2026-05-03T12:39:12.857Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=8lxsdJcnLdU",
|
||||
"title": "Sell More: How to Organize Your Sales Team in ODOO CRM",
|
||||
"description": "Perhaps you've heard the story of ODOO CRM before. Perhaps you've also heard of Oliver Twist. Well, I'm guessing you've never heard those two stories told ...",
|
||||
"module": "CRM",
|
||||
"id": 88,
|
||||
"createdAt": "2026-05-03T12:39:23.921Z",
|
||||
"updatedAt": "2026-05-03T12:39:23.921Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=BtiO3FGCbBk",
|
||||
"title": "Contact Warnings in ODOO: Crucial Information at a Crucial Time",
|
||||
"description": "Not every customer we interact with in ODOO is the same. Vendors can be quite different as well. Many times a sale order or purchase order would have been ...",
|
||||
"module": "CRM",
|
||||
"id": 89,
|
||||
"createdAt": "2026-05-03T12:39:50.888Z",
|
||||
"updatedAt": "2026-05-03T12:39:50.888Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=CxmvyuW1Ens",
|
||||
"title": "The Best Way to Prevent Duplicate Contacts in ODOO",
|
||||
"description": "Contacts are tied to pretty much everything in ODOO. That makes them incredibly important. Despite that, I've so many ODOO instances that are full of dupli...",
|
||||
"module": "CRM",
|
||||
"id": 90,
|
||||
"createdAt": "2026-05-03T12:40:05.407Z",
|
||||
"updatedAt": "2026-05-03T12:40:05.407Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=05y3wYOThD4",
|
||||
"title": "Importing Contacts in ODOO for Beginners",
|
||||
"description": "Being able to import or upload information is a powerful functionality in ODOO. That being said, it can be easy to get tripped up and quickly disenchanted i...",
|
||||
"module": "CRM",
|
||||
"id": 91,
|
||||
"createdAt": "2026-05-03T12:40:17.707Z",
|
||||
"updatedAt": "2026-05-03T12:40:17.707Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=F5tBR4sx6nY",
|
||||
"title": "Let Emails Do the Work: Leveraging Aliases in ODOO",
|
||||
"description": "How many times a day do you or your employees receive and email that requires you to then create a new record in ODOO, fill out that record, and then add any...",
|
||||
"module": "CRM",
|
||||
"id": 92,
|
||||
"createdAt": "2026-05-03T12:40:54.676Z",
|
||||
"updatedAt": "2026-05-03T12:40:54.676Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=8WC8BBmEt54&pp=0gcJCd4KAYcqIYzv",
|
||||
"title": "Show Another Website in ODOO for Beginners",
|
||||
"description": "You probably use more websites than just ODOO. That's totally fine! A nice easy way to show a web page in ODOO is to use an Iframe. It looks great and take...",
|
||||
"module": "Website",
|
||||
"id": 93,
|
||||
"createdAt": "2026-05-03T12:41:07.393Z",
|
||||
"updatedAt": "2026-05-03T12:41:07.393Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=CJ7GEScVND0",
|
||||
"title": "Automated Actions in ODOO for Beginners",
|
||||
"description": "Work With Me - https://www.odooityourself.com/meet-with-meJoin One of My Classes - https://odooityourself.com/slides/odoo-bookkeeping-1Get Weekly Tips and Tr...",
|
||||
"module": "CRM",
|
||||
"id": 94,
|
||||
"createdAt": "2026-05-03T12:41:22.779Z",
|
||||
"updatedAt": "2026-05-03T12:41:22.779Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=dmHGZD6xfnA",
|
||||
"title": "Unleash the Power of Server Actions in ODOO Today!",
|
||||
"description": "Ever wanted to create a button in ODOO that sets a reminder or sends an email? Maybe you want to be able to do all of these at the same time. If so, this i...",
|
||||
"module": "CRM",
|
||||
"id": 95,
|
||||
"createdAt": "2026-05-03T12:41:41.834Z",
|
||||
"updatedAt": "2026-05-03T12:41:41.834Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=0wFO2TsUeLE",
|
||||
"title": "Mastering List View in ODOO: Essential Tips and Tricks",
|
||||
"description": "Discover the power of List View in Odoo! In this beginner's tutorial, you'll learn how to effectively use the list view to see, update, and aggregate informa...",
|
||||
"module": "Sales",
|
||||
"id": 96,
|
||||
"createdAt": "2026-05-03T12:41:58.940Z",
|
||||
"updatedAt": "2026-05-03T12:41:58.940Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=ZfqdlW5Bh78",
|
||||
"title": "Mastering ODOO Form Views: A Step-by-Step Guide (Part 2)",
|
||||
"description": "Continuing where we left off, we're making your form views awesome in ODOO! To finish things off, we cover the many2one and one2many relational fields and tw...",
|
||||
"module": "Sales",
|
||||
"id": 97,
|
||||
"createdAt": "2026-05-03T12:42:16.772Z",
|
||||
"updatedAt": "2026-05-03T12:42:16.772Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=T70EJBnCpj0",
|
||||
"title": "Mastering Pivot Tables in ODOO - A Beginner's Guide",
|
||||
"description": "Discover the power of Pivot View in ODOO! Learn how to slice and dice data just like in Excel's pivot tables. This tutorial will guide beginners through the ...",
|
||||
"module": "Sales",
|
||||
"id": 98,
|
||||
"createdAt": "2026-05-03T12:42:30.814Z",
|
||||
"updatedAt": "2026-05-03T12:42:30.814Z"
|
||||
},
|
||||
{
|
||||
"url": "https://www.youtube.com/watch?v=UboNA-UEh2k",
|
||||
"title": "Kanban View in ODOO for Beginners #odoo #trello #tutorial",
|
||||
"description": "Are you a fan of Trello? Kanban view is probably something you'd be interested in. In ODOO, we may want to be able to group tasks according to status for p...",
|
||||
"module": "Project",
|
||||
"id": 99,
|
||||
"createdAt": "2026-05-03T12:42:43.311Z",
|
||||
"updatedAt": "2026-05-03T12:42:43.311Z"
|
||||
}
|
||||
]
|
||||
|
||||
+854
-498
File diff suppressed because it is too large
Load Diff
+1
-82
File diff suppressed because one or more lines are too long
+341
@@ -0,0 +1,341 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Business Model Canvas – Odoo für Sicherheitstechnik</title>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #f4f6f9;
|
||||
color: #1f2937;
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: linear-gradient(135deg, #0f172a, #1e3a8a);
|
||||
color: white;
|
||||
padding: 40px;
|
||||
border-radius: 18px;
|
||||
margin-bottom: 30px;
|
||||
box-shadow: 0 10px 30px rgba(0,0,0,0.15);
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 38px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
font-size: 18px;
|
||||
opacity: 0.9;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.summary {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
gap: 20px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.summary-card {
|
||||
background: white;
|
||||
border-radius: 16px;
|
||||
padding: 24px;
|
||||
box-shadow: 0 6px 20px rgba(0,0,0,0.08);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.summary-card h3 {
|
||||
color: #1e3a8a;
|
||||
font-size: 15px;
|
||||
margin-bottom: 12px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.summary-card p {
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
color: #111827;
|
||||
}
|
||||
|
||||
.canvas {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-rows: repeat(3, minmax(220px, auto));
|
||||
gap: 18px;
|
||||
}
|
||||
|
||||
.block {
|
||||
background: white;
|
||||
border-radius: 18px;
|
||||
padding: 22px;
|
||||
box-shadow: 0 8px 22px rgba(0,0,0,0.08);
|
||||
border-top: 6px solid #1e3a8a;
|
||||
}
|
||||
|
||||
.block h2 {
|
||||
font-size: 18px;
|
||||
margin-bottom: 16px;
|
||||
color: #1e3a8a;
|
||||
}
|
||||
|
||||
.block ul {
|
||||
padding-left: 18px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.block li {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.partners { grid-column: 1; grid-row: 1 / span 2; }
|
||||
.activities { grid-column: 2; grid-row: 1; }
|
||||
.value { grid-column: 3; grid-row: 1 / span 2; border-top-color: #16a34a; }
|
||||
.relationships { grid-column: 4; grid-row: 1; }
|
||||
.segments { grid-column: 5; grid-row: 1 / span 2; }
|
||||
.resources { grid-column: 2; grid-row: 2; }
|
||||
.channels { grid-column: 4; grid-row: 2; }
|
||||
.costs { grid-column: 1 / span 2; grid-row: 3; border-top-color: #dc2626; }
|
||||
.revenue { grid-column: 3 / span 3; grid-row: 3; border-top-color: #16a34a; }
|
||||
|
||||
.footer {
|
||||
margin-top: 40px;
|
||||
background: white;
|
||||
border-radius: 18px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 8px 22px rgba(0,0,0,0.08);
|
||||
}
|
||||
|
||||
.footer h2 {
|
||||
margin-bottom: 18px;
|
||||
color: #1e3a8a;
|
||||
}
|
||||
|
||||
.footer p {
|
||||
line-height: 1.8;
|
||||
font-size: 16px;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
color: #16a34a;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
.canvas {
|
||||
grid-template-columns: 1fr;
|
||||
grid-template-rows: auto;
|
||||
}
|
||||
|
||||
.block {
|
||||
grid-column: auto !important;
|
||||
grid-row: auto !important;
|
||||
}
|
||||
|
||||
.summary {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.summary {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>Business Model Canvas</h1>
|
||||
<p>
|
||||
Spezialisierte Odoo-Digitalisierungslösung für Unternehmen der Sicherheitstechnik.
|
||||
Fokus auf Wartungsverträge, Technikerplanung, Projektmanagement und Automatisierung administrativer Prozesse.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="summary">
|
||||
<div class="summary-card">
|
||||
<h3>Zielmarkt</h3>
|
||||
<p>5–100 MA</p>
|
||||
</div>
|
||||
|
||||
<div class="summary-card">
|
||||
<h3>Branchenwachstum</h3>
|
||||
<p>Hoch ↑</p>
|
||||
</div>
|
||||
|
||||
<div class="summary-card">
|
||||
<h3>Durchschn. Umsatz</h3>
|
||||
<p>1–20 Mio €</p>
|
||||
</div>
|
||||
|
||||
<div class="summary-card">
|
||||
<h3>Marge</h3>
|
||||
<p>8–20 %</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="canvas">
|
||||
|
||||
<div class="block partners">
|
||||
<h2>Schlüsselpartner</h2>
|
||||
<ul>
|
||||
<li>Odoo-Partnernetzwerk</li>
|
||||
<li>Hardware-Lieferanten</li>
|
||||
<li>Installationsbetriebe</li>
|
||||
<li>Cloud-Hosting-Anbieter</li>
|
||||
<li>IT-Systemhäuser</li>
|
||||
<li>Sicherheitsverbände</li>
|
||||
<li>Elektrounternehmen</li>
|
||||
<li>Brandschutzpartner</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block activities">
|
||||
<h2>Schlüsselaktivitäten</h2>
|
||||
<ul>
|
||||
<li>Odoo-Implementierung</li>
|
||||
<li>Prozessdigitalisierung</li>
|
||||
<li>Technikerplanung</li>
|
||||
<li>CRM-Einführung</li>
|
||||
<li>Automatisierung von Wartungen</li>
|
||||
<li>ERP-Schulungen</li>
|
||||
<li>Support & Betreuung</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block value">
|
||||
<h2>Wertversprechen</h2>
|
||||
<ul>
|
||||
<li>Reduktion administrativer Chaos-Prozesse</li>
|
||||
<li>Zentrale Verwaltung von Wartungsverträgen</li>
|
||||
<li>Digitale Einsatz- & Monteurplanung</li>
|
||||
<li>Automatische Rechnungsstellung</li>
|
||||
<li>Bessere Transparenz über Projekte & Service</li>
|
||||
<li>Weniger Excel, Papier und WhatsApp-Kommunikation</li>
|
||||
<li>Skalierbarkeit für schnell wachsende Unternehmen</li>
|
||||
<li>Branchenspezialisierte Odoo-Lösung</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block relationships">
|
||||
<h2>Kundenbeziehungen</h2>
|
||||
<ul>
|
||||
<li>Langfristige Betreuung</li>
|
||||
<li>Persönliche Ansprechpartner</li>
|
||||
<li>Wartungs- & Supportverträge</li>
|
||||
<li>Monatliche Optimierungsmeetings</li>
|
||||
<li>Onboarding & Mitarbeiterschulung</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block segments">
|
||||
<h2>Kundensegmente</h2>
|
||||
<ul>
|
||||
<li>Alarmanlagen-Unternehmen</li>
|
||||
<li>Videoüberwachungsfirmen</li>
|
||||
<li>Zutrittskontroll-Anbieter</li>
|
||||
<li>Brandschutztechnik</li>
|
||||
<li>Rauchmelder-Servicefirmen</li>
|
||||
<li>Smart-Building-Integratoren</li>
|
||||
<li>Sicherheitswartungsunternehmen</li>
|
||||
<li>Industriesicherheits-Anbieter</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block resources">
|
||||
<h2>Schlüsselressourcen</h2>
|
||||
<ul>
|
||||
<li>Odoo-Know-how</li>
|
||||
<li>Branchenwissen Sicherheitstechnik</li>
|
||||
<li>Implementierungs-Templates</li>
|
||||
<li>Support-Team</li>
|
||||
<li>CRM- und Automatisierungswissen</li>
|
||||
<li>Vertriebsprozesse</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block channels">
|
||||
<h2>Kanäle</h2>
|
||||
<ul>
|
||||
<li>LinkedIn Outreach</li>
|
||||
<li>Direktvertrieb</li>
|
||||
<li>Branchenevents & Messen</li>
|
||||
<li>Partnerschaften mit Elektrikern</li>
|
||||
<li>SEO & Content Marketing</li>
|
||||
<li>Empfehlungen & Netzwerke</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block costs">
|
||||
<h2>Kostenstruktur</h2>
|
||||
<ul>
|
||||
<li>Odoo-Lizenzen</li>
|
||||
<li>Personal & Consultants</li>
|
||||
<li>Vertrieb & Marketing</li>
|
||||
<li>Cloud-Infrastruktur</li>
|
||||
<li>Support & Schulungen</li>
|
||||
<li>Weiterentwicklung & Templates</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="block revenue">
|
||||
<h2>Einnahmequellen</h2>
|
||||
<ul>
|
||||
<li>Einmalige Implementierungsprojekte</li>
|
||||
<li>Monatliche Supportverträge</li>
|
||||
<li>Wartungs- & Servicepakete</li>
|
||||
<li>ERP-Schulungen</li>
|
||||
<li>Customizing & Erweiterungen</li>
|
||||
<li>Cloud-Hosting</li>
|
||||
<li>Langfristige Digitalisierungsberatung</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<h2>Strategische Bewertung</h2>
|
||||
|
||||
<p>
|
||||
Die Sicherheitstechnik-Branche besitzt ein <span class="highlight">hohes Wachstumspotenzial</span>,
|
||||
insbesondere durch steigende Anforderungen an Gebäude- und Unternehmenssicherheit,
|
||||
Smart-Building-Technologien sowie gesetzliche Wartungspflichten.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Viele Unternehmen dieser Branche wachsen operativ schneller als administrativ.
|
||||
Dadurch entstehen erhebliche Ineffizienzen in den Bereichen Einsatzplanung,
|
||||
Wartungsverträge, Lagerverwaltung und Rechnungsstellung.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Die Positionierung als spezialisierter Anbieter für
|
||||
<span class="highlight">„Digitalisierung von Sicherheits- und Wartungsunternehmen“</span>
|
||||
schafft eine klare Differenzierung gegenüber allgemeinen ERP- oder IT-Dienstleistern.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Besonders attraktiv sind Unternehmen mit wiederkehrenden Wartungsumsätzen,
|
||||
da diese langfristige Kundenbindungen und stabile Serviceerlöse ermöglichen.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user