2021-09-08 15:00:24 +03:00
<section class="gh-canvas" {{ scroll-top }} >
2021-01-21 12:11:51 +03:00
<GhCanvasHeader class="gh-canvas-header">
<h2 class="gh-canvas-title" data-test-screen-title>
Dashboard
</h2>
</GhCanvasHeader>
2021-01-21 12:20:06 +03:00
2021-02-17 14:11:01 +03:00
<div class="view-container gh-dashboard">
2021-02-24 21:09:19 +03:00
2022-01-31 16:05:20 +03:00
{{ # if ( and this .session .user .isAdmin ( not ( feature "dashboardHideGettingStarted" ) ) ( feature "improvedOnboarding" ) ) }}
2022-02-07 13:04:52 +03:00
<section class="gh-dashboard-area lw-banner" {{ css-transition "gh-dashboard-area" }} >
2022-01-31 15:28:22 +03:00
<div class="gh-lw-banner" style="background-image:url(assets/img/launch-wizard-bg.png);">
<h1>Not sure where to start? We got you.</h1>
<p>
Dive into our tutorials and guides for people who are new to Ghost and setting
up a brand new publication. Find out how to customize your site, publish your
first post, send email newsletters and setup vour memberships.
</p>
<a class="gh-btn gh-btn-green" href="https://ghost.org/resources/building/" target="_blank" rel="noopener noreferrer"><span>View resources</span></a>
<div class="gh-dashboard-dismiss">
<GhDropdownButton
@dropdownName="getting-started-dismiss"
@classNames="gh-btn gh-btn-icon icon-only gh-dashboard-dismissbutton dark"
>
<span>
{{ svg-jar "dotdotdot" }}
</span>
</GhDropdownButton>
<GhDropdown
@name="getting-started-dismiss"
@classNames="gh-dashboard-dismiss-dropdown dropdown-menu dropdown-triangle-top-right"
>
2022-02-02 19:09:43 +03:00
<button class="gh-btn" type="button" {{ on "click" ( toggle-feature "dashboardHideGettingStarted" ) }} ><span>Dismiss</span></button>
2022-01-31 15:28:22 +03:00
</GhDropdown>
</div>
</div>
</section>
{{ / if }}
{{ # if ( and this .session .user .isOwnerOnly ( not this .settings .editorIsLaunchComplete ) ( not ( feature "improvedOnboarding" ) ) ) }}
2021-02-24 21:09:19 +03:00
<section class="gh-dashboard-area lw-banner">
<div class="gh-lw-banner" style="background-image:url(assets/img/launch-wizard-bg.png);">
2021-03-11 00:18:44 +03:00
<h1>Select your publication style</h1>
2021-02-24 21:09:19 +03:00
<p>Customize your brand and connect to Stripe to get your membership site ready to be shown to the world.</p>
2021-02-24 21:18:13 +03:00
<LinkTo class="gh-btn gh-btn-green" @route="launch"><span>Start setup guide</span></LinkTo>
2021-02-25 12:57:46 +03:00
<div class="gh-dashboard-dismiss">
<GhDropdownButton @dropdownName="launch-wizard-dismiss"
2021-07-23 17:05:22 +03:00
@classNames="gh-btn gh-btn-icon icon-only gh-dashboard-dismissbutton dark">
2021-02-25 12:57:46 +03:00
<span>
{{ svg-jar "dotdotdot" }}
</span>
</GhDropdownButton>
<GhDropdown @name="launch-wizard-dismiss" @classNames="gh-dashboard-dismiss-dropdown dropdown-menu dropdown-triangle-top-right">
2022-02-07 14:11:19 +03:00
<button class="gh-btn" type="button" {{ on "click" this .dismissLaunchBanner }} ><span>Dismiss</span></button>
2021-02-25 12:57:46 +03:00
</GhDropdown>
</div>
2021-02-18 14:27:29 +03:00
</div>
2021-02-24 21:09:19 +03:00
</section>
2021-04-20 11:08:15 +03:00
{{ else if this .showMembersData }}
2021-02-24 21:09:19 +03:00
<section class="gh-dashboard-area charts">
<div class="gh-dashboard-box mrr">
<div class="flex items-center justify-between">
<h4 class="gh-dashboard-header">MRR</h4>
<h4 class="gh-dashboard-header secondary">30 days</h4>
</div>
<div class="gh-dashboard-chart-container">
2021-02-25 11:34:44 +03:00
{{ # if this .mrrStatsLoading }}
Loading...
{{ else }}
{{ # if this .mrrStatsError }}
<p class="error">
There was an error loading MRR
<code> {{ this .mrrStatsError .message }} </code>
</p>
2021-02-24 21:09:19 +03:00
{{ else }}
2021-02-25 11:34:44 +03:00
<div class="gh-dashboard-summary">
2021-03-08 20:10:51 +03:00
<div class="data"><span class="currency"> {{ this .mrrStatsData .currency }} </span> {{ format-number this .mrrStatsData .currentAmount }} </div>
2021-02-25 11:34:44 +03:00
<div class="growth {{ this .mrrStatsData .percentClass }} "> {{ this .mrrStatsData .percentGrowth }} %</div>
</div>
{{ # if this .mrrStatsData }}
<div class="gh-dashboard-chart">
<GhMembersChart @type="LineWithLine" @nightShift= {{ feature "nightShift" }} @showSummary= {{ false }} @showRange= {{ false }} @chartType="mrr" @chartStats= {{ this .mrrStatsData }} />
</div>
{{ / if }}
2021-02-24 21:09:19 +03:00
{{ / if }}
2021-02-19 08:48:01 +03:00
{{ / if }}
2021-02-16 20:12:24 +03:00
</div>
</div>
2021-02-24 21:09:19 +03:00
<div class="gh-dashboard-box total-members">
<div class="gh-dashboard-chart-container">
2021-02-25 11:34:44 +03:00
{{ # if this .memberCountStatsLoading }}
Loading...
{{ else }}
{{ # if this .memberCountStatsError }}
<p class="error">
There was an error loading total members
<code> {{ this .memberCountStatsData .message }} </code>
</p>
{{ else }}
<div class="gh-dashboard-summary small">
<h4 class="gh-dashboard-header">Total members</h4>
<div class="data-container">
2021-03-08 20:10:51 +03:00
<div class="data"> {{ format-number this .memberCountStatsData .all .total }} </div>
2021-02-25 11:34:44 +03:00
<div class="growth {{ this .memberCountStatsData .all .percentClass }} "> {{ this .memberCountStatsData .all .percentGrowth }} %</div>
</div>
</div>
<div class="gh-dashboard-chart small">
<GhMembersChart @type="LineWithLine" @nightShift= {{ feature "nightShift" }} @chartSize="small" @showSummary= {{ false }} @chartType="all-members" @showRange= {{ false }} @chartStats= {{ this .memberCountStatsData .all }} />
</div>
{{ / if }}
{{ / if }}
2021-02-16 20:12:24 +03:00
</div>
</div>
2021-02-24 21:09:19 +03:00
<div class="gh-dashboard-box paid-members">
<div class="gh-dashboard-chart-container">
2021-02-25 11:34:44 +03:00
{{ # if this .memberCountStatsLoading }}
Loading...
{{ else }}
{{ # if this .memberCountStatsError }}
<p class="error">
There was an error loading paid members
<code> {{ this .memberCountStatsData .message }} </code>
</p>
{{ else }}
<div class="gh-dashboard-summary small">
<h4 class="gh-dashboard-header">Paid members</h4>
<div class="data-container">
2021-03-08 20:10:51 +03:00
<div class="data"> {{ format-number this .memberCountStatsData .paid .total }} </div>
2021-02-25 11:34:44 +03:00
<div class="growth {{ this .memberCountStatsData .paid .percentClass }} "> {{ this .memberCountStatsData .paid .percentGrowth }} %</div>
</div>
</div>
<div class="gh-dashboard-chart small">
<GhMembersChart @type="LineWithLine" @nightShift= {{ feature "nightShift" }} @chartSize="small" @showSummary= {{ false }} @chartType="paid-members" @showRange= {{ false }} @chartStats= {{ this .memberCountStatsData .paid }} />
</div>
{{ / if }}
{{ / if }}
2021-02-17 14:11:01 +03:00
</div>
2021-02-17 13:25:14 +03:00
</div>
2021-02-24 21:09:19 +03:00
<div class="gh-dashboard-box newsletter-open-rate">
<div class="gh-dashboard-chart-container">
2021-02-25 11:34:44 +03:00
{{ # if this .newsletterOpenRatesLoading }}
Loading...
{{ else }}
{{ # if this .newsletterOpenRatesError }}
<p class="error">
There was an error loading newsletter open rates
<code> {{ this .memberCountStatsData .message }} </code>
</p>
{{ else }}
<div class="gh-dashboard-summary small">
<h4 class="gh-dashboard-header">Email open rate</h4>
2021-02-25 11:04:34 +03:00
2021-02-25 11:34:44 +03:00
<div class="data-container">
<div class="data"> {{ this .newsletterOpenRatesData .current }} %</div>
2021-03-05 14:46:32 +03:00
<div class="growth {{ this .newsletterOpenRatesData .percentClass }} "> {{ this .newsletterOpenRatesData .percentGrowth }} %</div>
2021-02-25 11:34:44 +03:00
</div>
</div>
<div class="gh-dashboard-chart small">
<GhMembersChart @type="bar" @nightShift= {{ feature "nightShift" }} @chartSize="small" @showSummary= {{ false }} @chartType="open-rate" @showRange= {{ false }} @chartStats= {{ this .newsletterOpenRatesData }} />
</div>
{{ / if }}
{{ / if }}
2021-02-22 11:29:48 +03:00
</div>
2021-02-17 13:25:14 +03:00
</div>
2021-02-24 21:09:19 +03:00
</section>
{{ / if }}
2021-02-16 20:12:24 +03:00
2021-03-11 00:15:51 +03:00
2021-02-17 14:11:01 +03:00
<section class="gh-dashboard-area mixed">
2022-02-02 19:09:43 +03:00
{{ # unless this .settings .editorIsLaunchComplete }}
2021-03-11 00:15:51 +03:00
<div class="gh-dashboard-container start-contents">
<div class="gh-dashboard-box blogpost">
<h2>Start creating content</h2>
2021-04-20 11:08:15 +03:00
{{ # if this .showMembersData }}
<LinkTo @route="members">
<span class="icon"> {{ svg-jar "members" }} </span>
<div>
<h4>Create your first member</h4>
<p>Add yourself or import members from CSV</p>
</div>
</LinkTo>
{{ / if }}
2021-03-11 00:15:51 +03:00
<LinkTo @route="editor.new" @model="post">
<span class="icon green"> {{ svg-jar "posts" }} </span>
<div>
<h4>Publish a post</h4>
<p>Get familiar with the Ghost editor and start creating</p>
</div>
</LinkTo>
</div>
</div>
2022-02-02 19:09:43 +03:00
{{ / unless }}
2021-03-11 00:15:51 +03:00
2021-02-17 13:25:14 +03:00
<div class="gh-dashboard-container col-2">
<div class="gh-dashboard-box">
<div class="content">
2022-01-03 17:09:16 +03:00
<h2>Customize your site</h2>
2021-03-10 23:49:55 +03:00
<p>Stand out from the crowd. Ghost lets you customize everything so you can create a publication that doesn’ t just look the same as what everyone else has.</p>
2021-02-17 13:25:14 +03:00
</div>
<div class="footer">
2021-10-21 18:29:56 +03:00
<LinkTo class="gh-btn gh-btn-outline mt2 mr2" @route="settings.design"><span>Design</span></LinkTo>
<LinkTo class="gh-btn gh-btn-outline mt2" @route="settings.members-email"><span>Email</span></LinkTo>
2021-02-17 13:25:14 +03:00
</div>
</div>
<div class="gh-dashboard-box">
<div class="content">
2021-03-10 23:49:55 +03:00
<h2>Looking for help with Ghost features?</h2>
<p>Our product knowledgebase is packed full of guides, tutorials, answers to frequently asked questions, tips for dealing with common errors, and much more. </p>
2021-02-17 13:25:14 +03:00
</div>
<div class="footer">
2022-02-02 19:09:43 +03:00
<a class="gh-btn gh-btn-outline mt2" href="https://ghost.org/help/" target="_blank" rel="noopener noreferrer"><span>Visit the help center →</span></a>
2021-02-17 13:25:14 +03:00
</div>
</div>
</div>
2021-04-20 11:08:15 +03:00
2021-07-22 23:17:17 +03:00
<a class="gh-dashboard-container" href="https://ghost.org/blog/types-of-newsletters/?utm_source=dashboard" target="_blank" rel="noopener noreferrer">
<div class="gh-dashboard-box blogpost">
2021-02-18 14:44:39 +03:00
<div class="content">
2021-07-22 23:17:17 +03:00
<h2>6 types of newsletters you can start today</h2>
<p>Choosing one of these newsletter types for your publication will help you create better content at a faster pace with less work.</p>
<p class="green">Get some inspiration →</p>
<div class="read-time">5 MIN READ</div>
2021-03-10 22:16:24 +03:00
</div>
2021-07-22 23:17:17 +03:00
<div class="thumbnail" style="background-image: url(assets/img/dashboard/bp1.jpg);"></div>
2021-03-10 22:16:24 +03:00
</div>
</a>
2021-03-10 22:21:26 +03:00
2022-02-02 19:09:43 +03:00
<a class="gh-dashboard-container" href="https://careers.ghost.org?utm_source=dashboard" target="_blank" rel="noopener noreferrer">
2021-07-22 23:17:17 +03:00
<div class="gh-dashboard-box grey gh-dashboard-careers">
2021-03-10 23:39:06 +03:00
<div class="summary">
2021-07-22 23:17:17 +03:00
<h2>We're hiring! Join the team that makes Ghost.</h2>
<p>The creator economy is growing faster than ever, and so are we! 📈 Join a team that's determined to make decentralised, open technology the heart and soul of new media 🌺</p>
2021-03-10 23:39:06 +03:00
</div>
2021-07-22 23:17:17 +03:00
<div class="gh-dashboard-careers-cta">
<span class="gh-btn gh-btn-primary"><span>See open roles →</span></span>
2021-02-18 14:44:39 +03:00
</div>
</div>
2021-07-22 23:17:17 +03:00
</a>
2021-03-10 22:21:26 +03:00
2021-07-22 23:17:17 +03:00
<a class="gh-dashboard-container reverse" href="https://ghost.org/blog/content-strategy-creator-funnel/?utm_source=dashboard" target="_blank" rel="noopener noreferrer">
2021-03-10 22:49:23 +03:00
<div class="gh-dashboard-box blogpost">
2021-07-22 23:17:17 +03:00
<div class="thumbnail" style="background-image: url(assets/img/dashboard/bp2.jpg);"></div>
2021-03-10 22:21:26 +03:00
<div class="content">
2021-07-22 23:17:17 +03:00
<h2>How to grow your audience, starting from 0</h2>
<p>Starting from zero is hard. Thankfully, successful creators have given us clues on how to grow an audience by using something called a content funnel.</p>
<p class="green">Here's how it works →</p>
2021-03-10 22:21:26 +03:00
<div class="read-time">9 MIN READ</div>
</div>
</div>
</a>
2021-03-10 22:49:23 +03:00
<div class="gh-dashboard-join-community" style="background-image: url(assets/img/dashboard/join-community.jpg)">
<div>
<h2>Join the Ghost creator community.</h2>
<p>Meet other people building both free & paid publications with Ghost. Talk strategy, get advice, or just hang out.</p>
2021-03-19 14:14:24 +03:00
<a class="gh-btn gh-btn-white gh-dashboard-btn" href="https://community.ghost.org" target="_blank" rel="noopener noreferrer"><span>Share the journey</span></a>
2021-03-10 22:49:23 +03:00
</div>
<a class="footer-link" href="https://community.ghost.org" target="_blank" rel="noopener noreferrer">community.ghost.org</a>
</div>
2021-02-17 14:11:01 +03:00
</section>
<section class="gh-dashboard-area members-activity">
2021-04-20 11:08:15 +03:00
{{ # if this .showMembersData }}
2022-02-07 14:11:19 +03:00
{{ # if ( not ( feature "membersActivityFeed" ) ) }}
2022-01-27 19:48:51 +03:00
{{ # if this .topMembersData }}
<div class="gh-dashboard-box grey top-members">
<div class="gh-dashboard-header-container">
<h4 class="gh-dashboard-header">Top members</h4>
{{ # if this .topMembersDataHasOpenRates }}
<h4 class="gh-dashboard-header secondary">Open rate</h4>
{{ else }}
<h4 class="gh-dashboard-header secondary">Member since</h4>
{{ / if }}
</div>
<div class="gh-dashboard-list">
{{ # if this .topMembersLoading }}
Loading...
{{ else }}
{{ # if this .topMembersError }}
<p class="tc">
There was an error loading member events.
<code class="hidden"> {{ this .events .error .message }} </code>
</p>
{{ else }}
<ul class="gh-dashboard-top-members">
{{ # each this .topMembersData as | member | }}
<li class="gh-dashboard-top-member">
<LinkTo class="member-details" @route="member" @model=" {{ member .id }} ">
<GhMemberAvatar @member= {{ member }} @containerClass="w9 h9 mr3 flex-shrink-0" />
{{ # if member .name }}
<span class="name"> {{ member .name }} </span>
{{ else }}
<span class="email"> {{ member .email }} </span>
{{ / if }}
</LinkTo>
{{ # if member .emailOpenRate }}
<span class="open-rate"> {{ member .emailOpenRate }} %</span>
{{ else }}
<span class="open-rate">
{{ moment-format member .createdAtUTC "D MMM YYYY" }}
</span>
{{ / if }}
</li>
{{ / each }}
</ul>
{{ / if }}
{{ / if }}
<div class="gh-dashboard-top-members-footer">
<LinkTo @route="members">See all members {{ svg-jar "arrow-right" }} </LinkTo>
</div>
</div>
</div>
{{ / if }}
2022-02-07 14:11:19 +03:00
{{ / if }}
2022-01-27 19:48:51 +03:00
2022-01-18 18:16:22 +03:00
<Dashboard::LatestMemberActivity />
2021-04-20 11:08:15 +03:00
{{ / if }}
2021-02-25 11:34:44 +03:00
2022-02-07 14:11:19 +03:00
{{ # if ( not ( or this .whatsNewEntriesLoading this .whatsNewEntriesError ) ) }}
2021-09-08 15:00:24 +03:00
<div class="gh-dashboard-box whats-new {{ if this .whatsNew .hasNew "has-new" }} ">
2021-02-24 18:59:01 +03:00
<div class="gh-dashboard-header-container">
<h4 class="gh-dashboard-header">What's new?</h4>
{{ svg-jar "gift" }}
</div>
2021-02-18 14:44:39 +03:00
<div class="content">
2021-02-24 18:59:01 +03:00
{{ # each this .whatsNewEntries as | entry | }}
2021-09-08 15:00:24 +03:00
<LinkTo @route="whatsnew" @query= {{ hash entry = entry .slug }} >
2021-02-24 18:59:01 +03:00
<h2> {{ entry .title }} </h2>
<span class="wn-date"> {{ moment-format entry .published_at "D MMM YYYY" }} </span>
{{ # if entry .custom_excerpt }}
<p> {{ entry .custom_excerpt }} </p>
{{ / if }}
2021-09-08 15:00:24 +03:00
</LinkTo>
2021-02-24 18:59:01 +03:00
{{ / each }}
</div>
<div class="footer">
2021-09-08 15:00:24 +03:00
<LinkTo @route="whatsnew" @query= {{ hash entry = null }} class="green">See more →</LinkTo>
2021-02-18 14:44:39 +03:00
</div>
</div>
2022-02-07 14:11:19 +03:00
{{ / if }}
2021-02-17 14:11:01 +03:00
</section>
</div>
2021-11-04 15:34:39 +03:00
</section>