OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)

This commit is contained in:
wangruiguo
2026-09-03 18:49:20 +08:00
commit d647428529
3501 changed files with 1988906 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_new_ideas_jdea.svg') !!}
</div>
<h3 class="primaryColor">{!! __('headlines.welcome_to_organized_idea_board') !!}</h3><br />
<p>{!! __('text.advanced_boards_helper_content') !!}
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="leantime.helperController.hideAndKeepHidden('advancedIdeaBoards')" contentRole="tertiary">{!! __('links.close_dont_show_again') !!}</x-global::forms.button>
</div>
</div>
</div>

View File

@@ -0,0 +1,22 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_schedule_pnbk.svg') !!}
</div><br />
<h3 class="primaryColor">{!! __('headlines.welcome_to_backlog') !!}</h3><br />
<p>{!! __('text.backlog_helper_content') !!}</p>
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,31 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_design_data_khdb.svg') !!}
</div>
<h1>Define your projects with ease</h1><br />
<p>Blueprints are your chance to make sense of all the data. Leantime has a variety of tools and canvases to define your project background via Business Model Canvases, SWOT Analysis or Empathy Maps.<br /><br />
If you don't know where to start we suggest you create a "Project Value Canvas". This canvas will answer the most important questions of your project:
Who is your customer? <br />
What problem are you solving?<br />
What is your solution?<br />
What benefit does your solution offer over your competitors<br />
</p>
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<x-global::forms.button tag="a" link="{{ BASE_URL }}/valuecanvas/showCanvas" contentRole="primary">Create a Project Value Canvas</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'cp'])

View File

@@ -0,0 +1,22 @@
<div class="center padding-lg" style="width:800px;">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg image="undraw_social_serenity_vhix.svg" maxWidth="auto" maxheight="auto" height="250px" headline="{{ __('headlines.welcome') }}"></x-global::undrawSvg>
</div>
</div>
<div class="row onboarding">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<br />
Leantime is built to empower your super powers and help you see your progress towards your goals.<br />
<br />
Most of us are used to creating task lists but were going to ask you to think about what exactly you are trying to accomplish.<br />
<br />
1. Set a vision (strategy) and set your goals<br />
2. Define the work that will get you to those goals<br />
3. And then reach them, planning your day to day with your My Work Dashboard.<br />
<br /><br />
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="primary" onclick="leantime.helperController.hideAndKeepHidden('dashboard'); leantime.helperController.startProjectDashboardTour();">{{ __("buttons.lets_go") }} <i class="fa-solid fa-arrow-right"></i></x-global::forms.button>
<div class="clearall"></div>
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'dbm'])

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'ea'])

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'em'])

View File

@@ -0,0 +1,4 @@
<script>
confetti();
jQuery.nmTop().close(2000);
</script>

View File

@@ -0,0 +1,27 @@
<div style="max-width:700px;">
<form class="onboardingModal" method="post" id="firstTaskOnboarding" action="{{ BASE_URL }}/help/firstLogin?step={{ $nextStep }}">
<input type="hidden" name="currentStep" value="{{ $currentStep }}" />
<div class="row">
<div class="col-md-8">
<h1>{{ __('headlines.welcome_to_leantime') }}</h1>
<p>{{ __('text.lets_start_with_first_task') }}</p>
<br />
<label><strong>{{ __('label.whats_one_thing_to_do_today') }}</strong></label>
<x-global::forms.text-input id="firstTask" name="headline" value="" placeholder="{{ __('input.placeholder.finish_slide_deck') }}" style="width:100%;" required />
<br />
<p class="text-muted">{{ __('text.first_task_help') }}</p>
<br />
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.lets_go')" />
</div>
<div class="col-md-4">
<div class='svgContainer' style="width:300px; margin-top:40px;">
{!! file_get_contents(ROOT . "/dist/images/svg/undraw_happy_news_re_tsbd.svg") !!}
</div>
</div>
</div>
<div class="row">
</div>
</form>
</div>

View File

@@ -0,0 +1,25 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_design_data_khdb.svg') !!}
</div>
<h1>{!! __('headlines.welcome_to_research_board') !!}</h1><br />
<p>{!! __('text.full_lean_canvas_helper_content') !!}</p>
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,47 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg
image="undraw_goals_re_lu76.svg"
maxWidth="auto"
headlineSize="var(--font-size-xxxl)"
maxheight="auto"
height="250px"
headline="Goals to keep you focused"
></x-global::undrawSvg>
</div>
</div>
<div class="row ">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<br />
<div id="firstLoginContent">
<p><br />Goals allow you to break down your project into achievable, measurable and actionable chunks.<br />While milestones focus on execution, goals are about the metrics you want to achieve.<br/>
Each goal should have a clear objective (the thing you want to achieve) and should be easily measurable using a single metric.<br /><br />
Once you have a goal you can assign milestones to it to break it down into the executable tasks.<br />
</p><br />
</div>
<br /><br />
<div class="row">
<div class="col-md-12 tw-text-center">
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="tertiary" onclick="leantime.helperController.closeModal()">I'll explore on my own</x-global::forms.button>
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="primary" onclick="leantime.helperController.closeModal(); leantime.helperController.startGoalTour();">{{ __("buttons.start_tour") }} <i class="fa-solid fa-arrow-right"></i></x-global::forms.button>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12 tw-text-center">
<form hx-post="{{ BASE_URL }}/help/helperModal/dontShowAgain" hx-trigger="change" hx-swap="none">
<label class="tw-text-sm tw-mt-sm" >
<input type="hidden" name="modalId" value="goals" />
<input type="checkbox" id="dontShowAgain" name="hidePermanently" style="margin-top:-2px;">
Don't show this again
</label>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,22 @@
<script>
jQuery(document).ready(function () {
// First login flow
@if($isFirstLogin === true || $isFirstLogin === "true")
leantime.helperController.firstLoginModal();
@else
// Returning user flow
@if(($isFirstLogin === false || $isFirstLogin === "false") && $showHelperModal === true)
// Show the appropriate helper modal for the current page
@if(is_array($currentModal) && isset($currentModal['autoLoad']) && ($currentModal['autoLoad'] === true || $currentModal['autoLoad'] === "true"))
leantime.helperController.showHelperModal('{{ $currentModal['template'] }}', 500, 700);
@elseif(is_string($currentModal))
leantime.helperController.showHelperModal('{{ $currentModal}}', 500, 700);
@endif
@endif
@endif
});
</script>

View File

@@ -0,0 +1,43 @@
<div class="center padding-lg" style="width:800px;">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg
image="undraw_social_serenity_vhix.svg"
maxWidth="auto"
headlineSize="var(--font-size-xxxl)"
maxheight="auto"
height="250px"
headline="{{ __('headlines.your_personal_dashboard') }}"
></x-global::undrawSvg>
</div>
</div>
<div class="row onboarding">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<br />
<div id="firstLoginContent">
<p>Your My Work dashboard brings everything that matters into focus. <br />
Your most important work is now front and center, organized just for you and how your brain works best.<br /><br />
From quick tasks to ambitious goals, everything you need is right here. This is your space to capture ideas, track progress, and celebrate wins along the way.<br />
</p><br />
</div>
<br /><br />
<div class="row">
<div class="col-md-12 tw-text-center">
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="tertiary" onclick="leantime.helperController.closeModal()">I'll explore on my own</x-global::forms.button>
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="primary" onclick="leantime.helperController.closeModal(); leantime.helperController.startMyWorkDashboardTour();">{{ __("buttons.start_tour") }} <i class="fa-solid fa-arrow-right"></i></x-global::forms.button>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12 tw-text-center">
<form hx-post="{{ BASE_URL }}/help/helperModal/dontShowAgain" hx-trigger="change" hx-swap="none">
<label class="tw-text-sm tw-mt-sm" >
<input type="hidden" name="modalId" value="home" />
<input type="checkbox" id="dontShowAgain" name="hidePermanently" style="margin-top:-2px;">
Don't show this again
</label>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,24 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_new_ideas_jdea.svg') !!}
</div>
<h3 class="primaryColor">{!! __('headlines.welcome_to_idea_board') !!}</h3><br />
<p>{!! __('text.idea_board_helper_content') !!}<br /></p>
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,24 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_new_ideas_jdea.svg') !!}
</div>
<h3 class="primaryColor">{!! __('headlines.welcome_to_idea_board') !!}</h3><br />
<p>{!! __('text.idea_board_helper_content') !!}<br /></p>
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'insights'])

View File

@@ -0,0 +1,26 @@
<form class="onboardingModal" method="post" action="{{ BASE_URL }}/help/firstLogin?step={{ $nextStep }}">
<input type="hidden" name="currentStep" value="{{ $currentStep }}" />
<div class="row">
<div class="col-md-6">
<h1>{{ __('headlines.invite_crew') }}</h1>
<p>{{ __('text.invite_team') }}</p>
<br />
<x-global::forms.text-input type="email" name="email1" value="" placeholder="{{ __('input.placeholder.email_invite') }}" style="width: 100%;" /><br />
<x-global::forms.text-input type="email" name="email2" value="" placeholder="{{ __('input.placeholder.email_invite') }}" style="width: 100%;" /><br />
<x-global::forms.text-input type="email" name="email3" value="" placeholder="{{ __('input.placeholder.email_invite') }}" style="width: 100%;" /><br />
<br />
</div>
<div class="col-md-6">
<div class='svgContainer' style="width:300px; margin-top:60px;">
{!! file_get_contents(ROOT . "/dist/images/svg/undraw_children_re_c37f.svg"); !!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 tw-text-right">
<x-global::forms.button tag="a" link="javascript:void(0);" contentRole="tertiary" onclick="jQuery.nmTop().close();">{{ __('links.skip_for_now') }}</x-global::forms.button>
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.lets_go')" />
</div>
</div>
</form>

View File

@@ -0,0 +1,44 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg
image="undraw_scrum-board_uqku.svg"
maxWidth="auto"
headlineSize="var(--font-size-xxxl)"
maxheight="auto"
height="250px"
headline="{{ __('headlines.the_kanban_board') }}"
></x-global::undrawSvg>
</div>
</div>
<div class="row ">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<br />
<div id="firstLoginContent">
<p><br />{!! __('text.kanban_helper_content') !!}
</p><br />
</div>
<br /><br />
<div class="row">
<div class="col-md-12 tw-text-center">
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="tertiary" onclick="leantime.helperController.closeModal()">I'll explore on my own</x-global::forms.button>
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="primary" onclick="leantime.helperController.closeModal(); leantime.helperController.startKanbanTour();">{{ __("buttons.start_tour") }} <i class="fa-solid fa-arrow-right"></i></x-global::forms.button>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12 tw-text-center">
<form hx-post="{{ BASE_URL }}/help/helperModal/dontShowAgain" hx-trigger="change" hx-swap="none">
<label class="tw-text-sm tw-mt-sm" >
<input type="hidden" name="modalId" value="kanban" />
<input type="checkbox" id="dontShowAgain" name="hidePermanently" style="margin-top:-2px;">
Don't show this again
</label>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'lbm'])

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'lean'])

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'minempathy'])

View File

@@ -0,0 +1,24 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_time_management_30iu.svg') !!}
</div><br />
<h3 class="primaryColor">{!! __('headlines.the_timesheets') !!}</h3>
<p>{!! __('text.my_timesheets_helper_content') !!}</p>
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_Organizing_projects_0p9a.svg') !!}
</div><br />
<h3 class="primaryColor">{!! __('headlines.welcome_to_your_project') !!}</h3><br />
{!! __('text.new_project_helper_content') !!}
</div>
</div>
<div class="row">
<div class="col-md-12 align-center">
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,19 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<h3 class="primaryColor">{!! __('headlines.help') !!}</h3><br /><br />
{!! __('text.not_found_helper_content_simple') !!}
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'obm'])

View File

@@ -0,0 +1,17 @@
<div clas="clear"></div>
<div class="pull-left">
<x-global::undrawSvg
image="undraw_game_day_ucx9.svg"
maxWidth="auto"
maxheight="auto"
height="100px"
align="left"
></x-global::undrawSvg>
</div>
<div class="">
</div>

View File

@@ -0,0 +1,44 @@
<div class="center padding-lg" style="width:800px;">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg
image="undraw_joyride_re_968t.svg"
maxWidth="auto"
headlineSize="var(--font-size-xxxl)"
maxheight="auto"
height="250px"
headline="Managing Projects"
></x-global::undrawSvg>
</div>
</div>
<div class="row onboarding">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<br />
<div id="firstLoginContent">
<p><br />Projects in Leantime are collaborative workspaces where you and your team organize, track, and deliver work efficiently. Each project serves as a container for related goals, tasks, milestones, and allows you to monitor progress in one central location. <br /><br />
Whether you're managing work, school, or internal personal initiatives, Leantime projects provide the structure and tools needed to turn ideas into successful outcomes.
</p><br />
</div>
<br /><br />
<div class="row">
<div class="col-md-12 tw-text-center">
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="tertiary" onclick="leantime.helperController.closeModal()">I'll explore on my own</x-global::forms.button>
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="primary" onclick="leantime.helperController.closeModal(); leantime.helperController.startProjectDashboardTour();">{{ __("buttons.start_tour") }} <i class="fa-solid fa-arrow-right"></i></x-global::forms.button>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12 tw-text-center">
<form hx-post="{{ BASE_URL }}/help/helperModal/dontShowAgain" hx-trigger="change" hx-swap="none">
<label class="tw-text-sm tw-mt-sm" >
<input type="hidden" name="modalId" value="projectDashboard" />
<input type="checkbox" id="dontShowAgain" name="hidePermanently" style="margin-top:-2px;">
Don't show this again
</label>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,31 @@
<div style="max-width:900px;">
<form class="onboardingModal" method="post" action="{{ BASE_URL }}/help/firstLogin?step={{ $nextStep }}">
<input type="hidden" name="currentStep" value="{{ $currentStep }}" />
<div class="row">
<div class="col-md-8">
<h1>{{ __('headlines.make_it_happen') }}</h1>
<p>{!! __('text.structured_project_thinking') !!}</p>
<br />
<label><strong>{{ __('label.what_are_you_trying_to_accomplish') }}</strong></label>
<x-global::forms.textarea id="accomplish" name="accomplish" value="" placeholder="" rows="3" style="width:99%; overflow-x: hidden;"></x-global::forms.textarea>
<br />
<label><strong>{{ __('label.how_does_the_world_look_like') }}</strong></label>
<x-global::forms.textarea id="wordlview" name="worldview" value="" placeholder="" rows="3" style="width:99%; overflow-x: hidden;"></x-global::forms.textarea>
<br />
<label><strong>{{ __('label.why_is_this_important') }}</strong></label>
<x-global::forms.textarea id="whyImportant" name="whyImportant" value="" placeholder="" rows="3" style="width:99%; overflow-x: hidden;"></x-global::forms.textarea>
</div>
<div class="col-md-4">
<div class='svgContainer' style="width:400px; margin-top:40px;">
{!! file_get_contents(ROOT . "/dist/images/svg/undraw_goals_re_lu76.svg") !!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 tw-text-right">
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.next')" />
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,25 @@
<div style="max-width:700px;">
<form class="onboardingModal" method="post" id="projectTitleOnboarding" action="{{ BASE_URL }}/help/firstLogin?step={{ $nextStep }}">
<input type="hidden" name="currentStep" value="{{ $currentStep }}" />
<div class="row">
<div class="col-md-8">
<h1>{{ __('headlines.hi_there') }}</h1>
<p>{!! __('text.get_organized_with_projects') !!}</p>
<br />
<label>{{ __('label.start_with_project_title') }}</label>
<x-global::forms.text-input id="projectName" name="projectname" value="" placeholder="" style="width:100%;" /><br />
</div>
<div class="col-md-4">
<div class='svgContainer' style="width:300px; margin-top:40px;">
{!! file_get_contents(ROOT . "/dist/images/svg/undraw_game_day_ucx9.svg") !!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 tw-text-right">
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.next')" />
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1,21 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_events_2p66.svg') !!}
</div>
<h3 class="primaryColor">{!! __('headlines.congrats_on_your_project') !!}</h3><br />
{!! __('notifications.project_created_successfully') !!}
</div>
</div>
<div class="row">
<div class="col-md-12 align-center">
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'retros'])

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'risks'])

View File

@@ -0,0 +1,44 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg
image="undraw_adjustments_p22m.svg"
maxWidth="auto"
headlineSize="var(--font-size-xxxl)"
maxheight="auto"
height="250px"
headline="{{ __('headlines.welcome_to_your_roadmap') }}"
></x-global::undrawSvg>
</div>
</div>
<div class="row ">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<br />
<div id="firstLoginContent">
<p><br />{!! __('text.milestone_helper_content') !!}
</p><br />
</div>
<br /><br />
<div class="row">
<div class="col-md-12 tw-text-center">
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="tertiary" onclick="leantime.helperController.closeModal()">I'll explore on my own</x-global::forms.button>
<x-global::forms.button tag="a" link="javascript:void(0)" contentRole="primary" onclick="leantime.helperController.closeModal(); leantime.helperController.startMilestoneTour();">{{ __("buttons.start_tour") }} <i class="fa-solid fa-arrow-right"></i></x-global::forms.button>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12 tw-text-center">
<form hx-post="{{ BASE_URL }}/help/helperModal/dontShowAgain" hx-trigger="change" hx-swap="none">
<label class="tw-text-sm tw-mt-sm" >
<input type="hidden" name="modalId" value="roadmap" />
<input type="checkbox" id="dontShowAgain" name="hidePermanently" style="margin-top:-2px;">
Don't show this again
</label>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'sb'])

View File

@@ -0,0 +1,24 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_complete_task_u2c3.svg') !!}
</div><br />
<h3 class="primaryColor">{!! __('headlines.welcome_to_clients_products') !!}</h3><br />
{!! __('text.show_clients_helper_content') !!}
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,23 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_Organizing_projects_0p9a.svg') !!}
</div><br />
<h3 class="primaryColor"></h3><br />
{!! __('text.show_projects_helper_content') !!}
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_design_data_khdb.svg') !!}
</div>
<h3 class="primaryColor">{!! __('headlines.welcome_to_simple_research_board') !!}</h3><br />
{!! __('text.simple_lean_canvas_helper_content') !!}
<br /><br />
</div>
</div>
<div class="row">
<div class="col-md-12">
<p>
</p>
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'sm'])

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'sq'])

View File

@@ -0,0 +1,161 @@
<div class="padding-lg" style="width:1190px;">
<div class="row">
<div class="col-md-12">
<x-global::undrawSvg image="undraw_unexpected-friends_42mc.svg" maxWidth="auto" maxheight="auto" height="250px" headline=""></x-global::undrawSvg>
</div>
</div>
<div class="row onboarding">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<div class="col-md-12" style="font-size:var(--font-size-l);">
<center>
<h1 class="fancyLink">Help us build a future where all minds thrive!</h1>
<p>Most productivity tools assume everyone thinks the same way: linearly, with perfect focus, motivated by arbitrary deadlines. Whether you have ADHD and need dopamine hits from completed tasks, are autistic and crave consistent structure, have dyslexia and think spatially, or you're just tired of tools that don't match how your brain actually works—you've probably given up on project management entirely.</p>
<br />
<p>We're building Leantime for minds that work differently. That includes neurodivergent brains, but also anyone who's ever felt like existing tools fight against their natural thinking patterns.</p>
<br /> <br />
</center>
<h1 class="fancyLink">Why Leantime won't disappear</h1>
<div class="tw-flex tw-w-full tw-justify-evenly tw-gap-5">
<div class="tw-flex-1" style="border: 1px solid var(--main-border-color); padding:15px; border-radius:var(--box-radius);">
<strong style="margin-bottom:5px; display:block;">6+ years</strong>
With consistent full time development since 2021.
</div>
<div class="tw-flex-1" style="border: 1px solid var(--main-border-color); padding:15px; border-radius:var(--box-radius);">
<strong style="margin-bottom:5px; display:block;">Self-funded/Community-funded</strong>
No VC pressure to pivot or monetize aggressively
</div>
<div class="tw-flex-1" style="border: 1px solid var(--main-border-color); padding:15px; border-radius:var(--box-radius);">
<strong style="margin-bottom:5px; display:block;">AGPL-3.0</strong>
Core will always remain open source by license
</div>
</div>
<br /><br /><br />
<h1 class="fancyLink">How can you help?</h1>
<div class="tw-flex tw-w-full tw-justify-evenly tw-gap-5">
<div class="tw-flex-1" style="background:var(--header-gradient); color:var(--main-titles-color); padding:15px; border-radius:var(--box-radius);">
<strong style="margin-bottom:5px; display:block; color:var(--main-titles-color);">Direct Sponsorship through Github</strong>
Fund open source development that benefits everyone<br /><br />
<x-global::forms.button tag="a" link="https://github.com/sponsors/Leantime" contentRole="primary" target="_blank" style="background:var(--main-titles-color); color:var(--accent1);">Sponsor Leantime</x-global::forms.button>
</div>
<div class="tw-flex-1" style="background:var(--header-gradient); color:var(--main-titles-color); padding:15px; border-radius:var(--box-radius);">
<strong style="margin-bottom:5px; display:block; color:var(--main-titles-color);">Purchase Plugins</strong>
Get advanced features while supporting development<br /><br />
<x-global::forms.button tag="a" link="{{ BASE_URL }}/plugins/marketplace" contentRole="primary" style="background:var(--main-titles-color); color:var(--accent1);" target="_blank">Browse Marketplace</x-global::forms.button>
</div>
</div>
<br /><br /><br />
<h1 class="fancyLink">How does your money help?</h1>
<div class="tw-flex tw-w-full tw-justify-evenly tw-gap-5">
<div class="tw-flex-1" >
<div style="background:var(--dropdown-link-hover-bg); padding:15px; border-radius:var(--box-radius);">
<small>Funds from</small><br /><strong style="margin-bottom:5px; display:block;">Github Sponsorships</strong>
<ul style="margin-left:15px;">
<li>New open source features</li>
<li>Accessibility improvements</li>
<li>Community-requested enhancements</li>
<li>Translation support</li>
</ul>
</div>
<div style="padding:5px 10px;">
<strong><em>Recent impact:<br/>Your sponsorships funded our new docker image improvements</em></strong>
</div>
</div>
<div class="tw-flex-1" >
<div style="background:var(--dropdown-link-hover-bg); padding:15px; border-radius:var(--box-radius);">
<small>Funds from</small><br /> <strong style="margin-bottom:5px; display:block;">Plugin Sales</strong>
<ul style="margin-left:15px;">
<li>Bug fixes and stability</li>
<li>Plugin development & maintenance</li>
<li>Testing and quality assurance</li>
<li>Documentation improvements</li>
</ul>
</div>
<div style="padding:5px 10px;">
<strong><em>Recent impact:<br/>Funded the My Work dashboard Updates</em></strong>
</div>
</div>
<div class="tw-flex-1" >
<div style="background:var(--dropdown-link-hover-bg); padding:15px; border-radius:var(--box-radius);">
<small>Funds from</small><br /><strong style="margin-bottom:5px; display:block;">SaaS Revenue</strong>
<ul style="margin-left:15px;">
<li>Server infrastructure</li>
<li>Website hosting</li>
<li>Development tools</li>
<li>Administrative costs</li>
</ul>
</div>
<div style="padding:5px 10px;">
<strong><em>Recent impact:<br/>Covers our server cost to host website, cloud and marketplace</em></strong>
</div>
</div>
</div>
<br /><br /><br />
<h1 class="fancyLink">Your impact in numbers</h1>
<div class="tw-flex tw-w-full tw-justify-center tw-gap-4">
<div class="tw-text-center tw-flex-1" style="background:#D6F3FF; padding:15px; border-radius:var(--box-radius); ">
<span style="color:var(--accent1); font-weight:bold; font-size:var(--font-size-xl);">50,000+</span>
<p>Installations you're supporting</p>
</div>
<div class="tw-text-center tw-flex-1" style="background:#EBF9FF; padding:15px; border-radius:var(--box-radius); ">
<span style="color:var(--accent1); font-weight:bold; font-size:var(--font-size-xl);">200+</span>
<p>Closed Bugs in 2024</p>
</div>
<div class="tw-text-center tw-flex-1" style="background:#FEEBF3; padding:15px; border-radius:var(--box-radius); ">
<span style="color:var(--accent1); font-weight:bold; font-size:var(--font-size-xl);">40+</span>
<p>Languages translated by the community</p>
</div>
<div class="tw-text-center tw-flex-1" style="background:#FBFDED; padding:15px; border-radius:var(--box-radius); ">
<span style="color:var(--accent1); font-weight:bold; font-size:var(--font-size-xl);">100%</span>
<p>Of sponsorship goes to development</p>
</div>
</div>
<br /><br /><br />
<h1 class="fancyLink">Who's behind Leantime?</h1>
<div class="tw-flex tw-w-full tw-justify-evenly tw-gap-5">
<div class="tw-flex-1" style="background:var(--dropdown-link-hover-bg); padding:15px; border-radius:var(--box-radius);">
<img src="{{ BASE_URL }}/dist/images/marcel.png" style="float:right; width:100px; border:none; box-shadow:none; margin-left:10px; margin-bottom:10px;"/>
<p><strong style="margin-bottom:5px; display:block;">👋 I'm Marcel</strong>German immigrant, dad to an autistic daughter, and living with ADHD myself.</p>
<br />
<p>Traditional project management tools never clicked for me. They felt like they were built by neurotypical minds for neurotypical minds. When I was freelancing and struggling to keep client projects organized, I started building something that worked with my brain instead of against it.</p>
<p>What started as a personal solution became Leantime when I realized millions of others needed the same thing.</p><br />
<a href="https://www.linkedin.com/in/marcelfolaron/" target="_blank" ><i class="fa fa-linkedin"></i></a>
</div>
<div class="tw-flex-1" style="background:var(--dropdown-link-hover-bg); padding:15px; border-radius:var(--box-radius);">
<img src="{{ BASE_URL }}/dist/images/gloria.png" style="float:right; width:100px; border:none; box-shadow:none; margin-left:10px; margin-bottom:10px;"/>
<p><strong style="margin-bottom:5px; display:block;">👋 And I'm Gloria</strong>Former ER nurse turned product manager, first-generation Hispanic entrepreneur.</p>
<br /><p>I spent years in high-pressure medical environments where organization literally saves lives. But when I started my own business, traditional project tools felt overwhelming and disconnected from how I actually think and work.</p>
<p>My background in behavioral science and motivation research drives how we build features that don't just organize tasks—they help you actually want to complete them.</p><br />
<a href="https://www.linkedin.com/in/gloriafolaron/" target="_blank" ><i class="fa fa-linkedin"></i></a>
</div>
</div>
<br /><br />
<div>
<center>
<p>We can create a world where no one has to fight their tools to do great work. Your sponsorship funds a future where software adapts to human diversity, not the other way around.</p><br /> <br />
<h1 class="fancyLink">Ready to make a direct impact?</h1><p>Every contribution—from $1 to $100—goes directly to making Leantime better for everyone.</p>
<br />
<div class="tw-text-center">
<x-global::forms.button tag="a" contentRole="primary" class="btn-lg" link="https://github.com/sponsors/Leantime" target="_blank" rel="noopener noreferrer">Start Sponsoring Today</x-global::forms.button>
</div>
</center>
</div>
<br />
<div class="clearall"></div>
</div>
<div class="clearall"></div>
</div>
</div>
</div>

View File

@@ -0,0 +1 @@
@include('canvas::helper', ['canvasName' => 'swot'])

View File

@@ -0,0 +1,24 @@
<div class="center padding-lg">
<div class="row">
<div class="col-md-12">
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_real_time_collaboration_c62i.svg') !!}
</div>
<h3 class="primaryColor">Documentation where you can find it</h3><br />
<p>Our docs allow you to write and share documentation with your team. You can create multiple spaces to organize your documentation into teams, areas or document category.<br/>
Create documents to share knowledge, processes and procedures. You can also create a document to share a link to a file or a folder in your cloud storage.<br/>
</p>
<br />
</div>
</div>
<div class="row">
<div class="col-md-12">
</div>
</div>
</div>