M core/routes.go => core/routes.go +7 -1
@@ 228,8 228,8 @@ func (s *Service) GQLPlayground(c echo.Context) error {
if err != nil {
return fmt.Errorf("Error formatting json response: %w", err)
}
- resw.Flush()
+ resw.Flush()
gmap["results"] = template.HTML(resBuf.String())
return links.Render(c, http.StatusOK, "graphql.html", gmap)
}
@@ 272,6 272,12 @@ func (s *Service) Homepage(c echo.Context) error {
return s.OrgLinksList(c)
}
+ gctx := c.(*server.Context)
+ if gctx.User.IsAuthenticated() {
+ // Redirect logged in users to their home feed
+ return c.Redirect(http.StatusFound, c.Echo().Reverse(s.RouteName("home_link_list")))
+ }
+
lt := localizer.GetSessionLocalizer(c)
pd := localizer.NewPageData(lt.Translate("Welcome to Link Taco"))
pd.Data["intro"] = lt.Translate("lorem ipsum")
M static/css/style.css => static/css/style.css +19 -0
@@ 476,8 476,27 @@ a.bullet-link:before {
margin-bottom: 25px;
}
+.tour-description {
+ margin-left: 42px;
+ font-style: italic;
+}
+
+.tour-intro {
+ margin-top: 5px;
+ margin-bottom: 35px;
+}
+
+.tour-title {
+ border-bottom: solid #ccc 1px;
+ font-weight: bold;
+}
+
.tour-section-img {
margin-top: 15px;
+ border-radius: 4px;
+ box-shadow: 1px 1px 5px rgba(0,0,0,.4);
+ width: 315px;
+ height: 177px;
}
.non-starred {
M templates/feature_tour.html => templates/feature_tour.html +125 -51
@@ 3,87 3,161 @@
<section class="app-header">
<h1 class="app-header__title">{{.pd.Title}}</h1>
</section>
+
<section class="card shadow-card">
- <img src="{{staticURL "img/example.png"}}"/>
+ <div class="tour-intro">
+ <p>
+ <strong>Welcome to Link Tako</strong>
+ lorem ipsum dolor sit, amet consectetur adipisicing elit. Consequuntur fugiat sunt harum
+ quia aliquid ipsum eligendi ad atque quasi maiores cumque, facere voluptatem debitis ea
+ placeat illo? Atque, aperiam placeat.
+ </p>
+ <ul>
+ <li>Lorem ipsum dolor sit, amet</li>
+ <li>consectetur adipisicing elit.</li>
+ <li>Consequuntur fugiat sunt</li>
+ <li>eligendi ad atque quasi maiores cumque</li>
+ </ul>
+ <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Consequuntur fugiat sunt harum</p>
+ </div>
<div class="tour-section row">
- <div class="col">
- <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.organize_bookmarks}}</h3>
+ <ul>
+ <li>{{.pd.Data.public_private}}</li>
+ <li>{{.pd.Data.tagging_organize}}</li>
+ <li>{{.pd.Data.custom_domain}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>{{.pd.Data.description}}</p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
- <h4>{{.pd.Data.organize_bookmarks}}</h4>
- <h5>{{.pd.Data.public_private}}</h5>
- <h5>{{.pd.Data.description}}</h5>
- <h5>{{.pd.Data.tagging_organize}}</h5>
- <h5>{{.pd.Data.custom_domain}}</h5>
+ <div class="col-4">
+ <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
<div class="tour-section row">
- <div class="col">
- <h4 class="text-left">{{.pd.Data.short_links}}</h4>
- <h5>{{.pd.Data.create_short_links}}</h5>
- <h5>{{.pd.Data.tagging_organize}}</h5>
- <h5>{{.pd.Data.create_multiple_qr_codes}}</h5>
- <h5>{{.pd.Data.full_analytics}}</h5>
- <h5>{{.pd.Data.custom_domain}}</h5>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.short_links}}</h3>
+ <ul>
+ <li>{{.pd.Data.create_short_links}}</li>
+ <li>{{.pd.Data.tagging_organize}}</li>
+ <li>{{.pd.Data.create_multiple_qr_codes}}</li>
+ <li>{{.pd.Data.full_analytics}}</li>
+ <li>{{.pd.Data.custom_domain}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro voluptate illo alias fugit
+ nobis, accusamus, quae eius repellat quaerat.
+ </p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
+ <div class="col-4">
<img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
<div class="tour-section row">
- <div class="col">
- <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.link_lists}}</h3>
+ <ul>
+ <li>{{.pd.Data.create_link_listings}}</li>
+ <li>{{.pd.Data.use_profile_bio_links}}</li>
+ <li>{{.pd.Data.tagging_organize}}</li>
+ <li>{{.pd.Data.create_multiple_qr_codes}}</li>
+ <li>{{.pd.Data.full_analytics}}</li>
+ <li>{{.pd.Data.custom_domain}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro voluptate illo alias fugit
+ nobis, accusamus, quae eius repellat quaerat.
+ </p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
- <h4>{{.pd.Data.link_lists}}</h4>
- <h5>{{.pd.Data.create_link_listings}}</h5>
- <h5>{{.pd.Data.use_profile_bio_links}}</h5>
- <h5>{{.pd.Data.tagging_organize}}</h5>
- <h5>{{.pd.Data.create_multiple_qr_codes}}</h5>
- <h5>{{.pd.Data.full_analytics}}</h5>
- <h5>{{.pd.Data.custom_domain}}</h5>
+ <div class="col-4">
+ <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
<div class="tour-section row">
- <div class="col">
- <h4 class="text-left">{{.pd.Data.collaboration}}</h4>
- <h5>{{.pd.Data.business_accounts_can_have_unlimited_members}}</h5>
- <h5>{{.pd.Data.members_can_add_access_organization}}</h5>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.collaboration}}</h3>
+ <ul>
+ <li>{{.pd.Data.business_accounts_can_have_unlimited_members}}</li>
+ <li>{{.pd.Data.members_can_add_access_organization}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro voluptate illo alias fugit
+ nobis, accusamus, quae eius repellat quaerat.
+ </p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
+ <div class="col-4">
<img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
<div class="tour-section row">
- <div class="col">
- <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.integrations}}</h3>
+ <ul>
+ <li>{{.pd.Data.slack_integration}}</li>
+ <li>{{.pd.Data.mattermost}}</li>
+ <li>{{.pd.Data.use_external_tools}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro voluptate illo alias fugit
+ nobis, accusamus, quae eius repellat quaerat.
+ </p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
- <h4>{{.pd.Data.integrations}}</h4>
- <h5>{{.pd.Data.slack_integration}}</h5>
- <h5>{{.pd.Data.mattermost}}</h5>
- <h5>{{.pd.Data.use_external_tools}}</h5>
+ <div class="col-4">
+ <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
<div class="tour-section row">
- <div class="col">
- <h4 class="text-left">{{.pd.Data.api_powered}}</h4>
- <h5>{{.pd.Data.full_graphql_api_giving_complete_access}}</h5>
- <h5>{{.pd.Data.oauth2_support_create_integrations}}</h5>
- <h5>{{.pd.Data.personal_access_tokens}}</h5>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.api_powered}}</h3>
+ <ul>
+ <li>{{.pd.Data.full_graphql_api_giving_complete_access}}</li>
+ <li>{{.pd.Data.oauth2_support_create_integrations}}</li>
+ <li>{{.pd.Data.personal_access_tokens}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro voluptate illo alias fugit
+ nobis, accusamus, quae eius repellat quaerat.
+ </p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
+ <div class="col-4">
<img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
<div class="tour-section row">
- <div class="col">
- <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
+ <div class="col-8">
+ <h3 class="tour-title">{{.pd.Data.import_export}}</h3>
+ <ul>
+ <li>{{.pd.Data.import_pinboard}}</li>
+ <li>{{.pd.Data.export_json}}</li>
+ </ul>
+ <div class="tour-description">
+ <p>
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro voluptate illo alias fugit
+ nobis, accusamus, quae eius repellat quaerat.
+ </p>
+ <p>— Juan Perez, Netlandish Inc.</p>
+ </div>
</div>
- <div class="col">
- <h4>{{.pd.Data.import_export}}</h4>
- <h5>{{.pd.Data.import_pinboard}}</h5>
- <h5>{{.pd.Data.export_json}}</h5>
+ <div class="col-4">
+ <img class="tour-section-img" src="{{staticURL "img/example.png"}}"/>
</div>
</div>
</section>
M templates/index.html => templates/index.html +1 -0
@@ 2,6 2,7 @@
{{ define "title" }}{{ .pd.Title }}{{ end }}
{{if .isAuthenticated}}
<section class="card shadow-card">
+ {{- /* Should never be reached */ -}}
<h1>{{.pd.Title}}</h1>
<p>{{.pd.Data.intro}}</p>
</section>