diff --git a/.env.sample b/.env.sample index 09067154..245542b2 100644 --- a/.env.sample +++ b/.env.sample @@ -55,4 +55,6 @@ SMTP_PORT= SMTP_USERNAME= SMTP_PASSWORD= SMTP_FROM_EMAIL= -SMTP_REPLY_EMAIL= \ No newline at end of file +SMTP_REPLY_EMAIL= + +TEAM_LOGO=https://example.com/images/logo.png diff --git a/app.json b/app.json index ecd8dd5f..c05d2994 100644 --- a/app.json +++ b/app.json @@ -142,6 +142,10 @@ "GITHUB_ACCESS_TOKEN": { "description": "An API token for GitHub, optional for self hosted (optional)", "required": false + }, + "TEAM_LOGO": { + "description": "A logo that will be displayed on the signed out home page", + "required": false } } } diff --git a/server/pages/About.js b/server/pages/About.js deleted file mode 100644 index a6d90cf2..00000000 --- a/server/pages/About.js +++ /dev/null @@ -1,122 +0,0 @@ -// @flow -import * as React from 'react'; -import styled from 'styled-components'; -import Grid from 'styled-components-grid'; -import PageTitle from './components/PageTitle'; -import Header from './components/Header'; -import Content from './components/Content'; - -const List = styled('ul')` - padding-left: 1em; -`; - -export default function About() { - return ( - - - -
-

About

-

The ideas behind Outline

-
- -

- Outline is a wiki and knowledge base built for growing teams. We’re - focused on speed, usability and extensibility. -

-

- The project consists of an{' '} - - Open Source core - {' '} - which can be hosted on your own infrastructure and a paid, hosted, - service (you’re looking at it!) that provides income for continued - feature development and maintenance. -

- - - -

Open Source

-

- Most software products today are built to be closed source, so why - make the code public? We believe there are many advantages to - doing so: -

- -
  • - Accountability. Being open source helps to keep - the team accountable for progress, code quality, communication, - and roadmap. -
  • -
  • - Community. We’re building a community of - like-minded people that can contribute plugins, integrations, - and fixes to the project that will benefit everyone. -
  • -
  • - Marketing. Every product needs a wedge into the - market. Being open source offers many opportunities to spread - the project. -
  • -
  • - Security. We take privacy of your data - extremely seriously. Getting more eyes on the code makes us more - confident that Outline is as secure as possible. -
  • -
  • - Peace of Mind. A lot of software products are - shut down and disappear, in the worst case scenario you’ll - always be able to run your own copy of Outline. -
  • -
    -
    - - -

    FAQ

    -

    -

    Why would I pay you if I can run Outline myself?

    - You don’t have to but you might have better things to do with your - time. When you sign up for Outline, you’ll always be running the - latest version, have all the features and we’ll answer the - questions your team might have. You’ll also help to keep Outline - getting better by supporting us financially. -

    -

    -

    Can I use X to signin to Outline?

    - We started with Slack and Google as many teams are already using - these services for team identity. We’ll consider adding more login - methods soon. Please let us know which one you would like to see - next{' '} - - here - . -

    -

    -

    How can I export my data if you go away?

    - Outline includes the ability to export individual documents, - collections or your entire knowledge base to markdown with a - single click so you’re never locked in. We also have an extensive{' '} - API that can be used for accessing - documents programatically. -

    -

    -

    How can I get in touch with you?

    - You can drop us a note on our{' '} - Spectrum community or - email us at{' '} - hello@getoutline.com. -

    -
    -
    -
    -
    - ); -} diff --git a/server/pages/Home.js b/server/pages/Home.js index cef2f436..ded86439 100644 --- a/server/pages/Home.js +++ b/server/pages/Home.js @@ -3,16 +3,11 @@ import * as React from 'react'; import { Helmet } from 'react-helmet'; import styled from 'styled-components'; import Grid from 'styled-components-grid'; -import breakpoint from 'styled-components-breakpoint'; import AuthErrors from './components/AuthErrors'; import Hero from './components/Hero'; import HeroText from './components/HeroText'; -import Centered from './components/Centered'; import SigninButtons from './components/SigninButtons'; -import SlackLogo from '../../shared/components/SlackLogo'; -import GithubLogo from '../../shared/components/GithubLogo'; -import Flex from '../../shared/components/Flex'; -import { githubUrl, slackAppStoreUrl } from '../../shared/utils/routeHelpers'; +import { githubUrl } from '../../shared/utils/routeHelpers'; type Props = { notice?: 'google-hd' | 'auth-error' | 'hd-not-allowed', @@ -30,7 +25,8 @@ function Home(props: Props) { -

    Your team’s knowledge base

    + {process.env.TEAM_LOGO && } +

    Our team’s knowledge base

    Team wiki, documentation, meeting notes, playbooks, onboarding, work logs, brainstorming, & more… @@ -38,186 +34,18 @@ function Home(props: Props) {

    +

    + Powered by Outline +

    - - - - - - -

    Improve Communication

    -

    - Easily structure your team’s information in one central, - structured location. No more hunting through folders or - scanning pages of search results and chat conversations. -

    -
    - -

    Safe & Secure

    -

    - Outline provides a secure place for your team’s - documentation on our hosted platform, stored in portable - Markdown format. Or, you can run your own copy – it’s open - source! -

    -
    -
    - - - -
    -
    -
    -
    - - - -

    Blazing Fast

    -

    - Outline is fast, really fast. We’ve worked hard to ensure - millisecond response times – documents load instantly, search is - speedy and navigating the UI is delightful. -

    -
    - - -

    Markdown Support

    -

    - Documents are stored in plain Markdown making editing, import - and export painless. Shortcuts are also built right into the - editor so you can easily format using **markdown syntax** if you - like. -

    -
    - -

    -  Slack & API -

    -

    - Get Slack notifications about changes and search Outline - directly within Slack using the{' '} - /outline <keyword> command. Access your - information programatically through the modern API. -

    -

    - Slack App -

    -
    - - -

    -  Open Source -

    -

    - Outline is open source, so the community can help improve it - too. You get new features, interface improvements, bug fixes, - and a transparent roadmap for free. -

    -

    - GitHub -

    -
    -
    -
    -
    ); } -const Screenshot = styled.img` - width: 100%; - box-shadow: 0 0 80px 0 rgba(124, 124, 124, 0.5), - 0 0 10px 0 rgba(237, 237, 237, 0.5); - border-radius: 5px; - - ${breakpoint('desktop')` - margin-top: -120px; - margin-left: 120px; - width: 135%; - `}; -`; - -const Mask = styled.div` - width: 100%; - overflow: hidden; - padding: 8em 0; -`; - -const Features = styled.div` - background: #00adff; - padding: 0 2em; - width: 100%; -`; - -const Feature = styled(Grid.Unit)` - padding: 2em 0; - - p { - font-weight: 500; - opacity: 0.8; - } - - h2 { - display: flex; - font-size: 1.8em; - align-items: center; - margin-top: 0; - } - - a { - color: ${props => props.theme.black}; - text-decoration: underline; - text-transform: uppercase; - font-weight: 500; - font-size: 14px; - } - - ${breakpoint('tablet')` - padding: 4em 0; - `}; -`; - -const Footer = styled.div` - background: #aa34f0; - text-align: left; - width: 100%; - padding: 4em 2em; - - h2 { - font-size: 1.8em; - margin-top: 0; - } - - p { - margin-bottom: 0; - } - - ${breakpoint('tablet')` - margin: 2em 0; - padding: 6em 4em; - `}; +const Logo = styled.img` + height: 60px; + border-radius: 4px; `; export default Home; diff --git a/server/pages/Pricing.js b/server/pages/Pricing.js deleted file mode 100644 index 7362302f..00000000 --- a/server/pages/Pricing.js +++ /dev/null @@ -1,203 +0,0 @@ -// @flow -import * as React from 'react'; -import styled from 'styled-components'; -import breakpoint from 'styled-components-breakpoint'; -import Grid from 'styled-components-grid'; -import PageTitle from './components/PageTitle'; -import Header from './components/Header'; -import Content from './components/Content'; -import Button from './components/Button'; -import Notice from '../../shared/components/Notice'; -import { mailToUrl, githubUrl } from '../../shared/utils/routeHelpers'; - -export default function Pricing() { - return ( - - -
    -

    Our Pricing

    -

    Our pricing is simple. You’ll only pay for what you use.

    -
    - - - -
    - Free - - - $ - - 0 - -
    -
    -

    Top features:

    -
      -
    • Upto 5 team members
    • -
    • Unlimited documents
    • -
    • All integrations
    • -
    • API access
    • -
    -
    -
    - -
    - Standard - - - $ - - 5{' '} - - per seat per month - - -
    -
    -

    Top features:

    -
      -
    • Unlimited team members
    • -
    • Unlimited documents
    • -
    • Unlimited version history
    • -
    • Email support
    • -
    -
    - - Note: Outline is in Beta. This plan is currently free until public - release in Q1 2019. - -
    -
    -
    - - -
    -

    Self Hosted

    -

    Host your own instance on-premise or in the cloud.

    -
    - - -
    - Open Source - - - $ - - 0 - -
    -

    - Outline’s codebase is open source. If you wish to run the service - on your own infrastructure you can do so. -

    - - - -
    - -
    - Enterprise - - - $ - - 199 per month - -
    - -

    - Support continued development of Outline. Get dedicated support - with setup, maintainence, and product issues. -

    - - - -
    -
    -
    -
    - ); -} - -const Plan = styled(Grid.Unit)` - padding: 2em 0; - position: relative; - - &:before { - display: none; - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: ${props => props.theme.smoke}; - transform: skewX(2deg); - z-index: -1; - margin: 0 2em; - - ${breakpoint('tablet')` - display: block; - `}; - } - - ${breakpoint('tablet')` - padding: 2em 6em; - `}; - - ul { - padding: 0; - list-style: none; - - li { - &:before { - content: '✓'; - margin-right: 6px; - font-weight: 600; - color: ${props => props.theme.primary}; - } - } - } -`; - -const Centered = styled.div` - text-align: center; -`; - -const Name = styled.h3` - text-align: center; -`; - -const Price = styled.h2` - text-align: center; - font-size: 2.5em; - min-height: 90px; - margin-top: 0; - - span { - font-size: 1em; - } -`; - -const Period = styled.p` - font-size: 13px; - color: ${props => props.theme.slateDark}; -`; diff --git a/server/pages/Privacy.js b/server/pages/Privacy.js deleted file mode 100644 index b4007002..00000000 --- a/server/pages/Privacy.js +++ /dev/null @@ -1,172 +0,0 @@ -// @flow -import * as React from 'react'; -import Grid from 'styled-components-grid'; -import PageTitle from './components/PageTitle'; -import Header from './components/Header'; -import Content from './components/Content'; - -export default function Privacy() { - return ( - - -
    -

    Privacy Policy

    -

    How we collect and use your information

    -
    - -

    - Your privacy is critically important to us. At Outline we have a few - fundamental principles: -

    - -
      -
    • - We don’t ask you for personal information unless we truly need it. -
    • -
    • - We don’t share your personal information with anyone except to - comply with the law, develop our products, or protect our rights. -
    • -
    • - We don’t store personal information on our servers unless required - for the on-going operation of one of our services. -
    • -
    - -

    - If you have questions about deleting or correcting your personal data - please contact our support team. -

    - -

    - Outline operates website getoutline.com. It is Outline’s policy to - respect your privacy regarding any information we may collect while - operating our websites. -

    - -

    Website Visitors

    -

    - Like most website operators, Outline collects - non-personally-identifying information of the sort that web browsers - and servers typically make available, such as the browser type, - language preference, referring site, and the date and time of each - visitor request. Outline’s purpose in collecting non-personally - identifying information is to better understand how Outline’s visitors - use its website. From time to time, Outline may release - non-personally-identifying information in the aggregate, e.g., by - publishing a report on trends in the usage of its website. Outline - also collects potentially personally-identifying information like - Internet Protocol (IP) addresses for logged in users. -

    - -

    Gathering of Personally-Identifying Information

    - -

    - Certain visitors to Outline’s websites choose to interact with Outline - in ways that require Outline to gather personally-identifying - information. The amount and type of information that Outline gathers - depends on the nature of the interaction. For example, we ask visitors - who sign up to provide an email address or get it with authentication - partner. Those who engage in transactions with Outline are asked to - provide additional information, including as necessary the personal - and financial information required to process those transactions. In - each case, Outline collects such information only insofar as is - necessary or appropriate to fulfill the purpose of the visitor’s - interaction with Outline. Outline does not disclose - personally-identifying information other than as described below. And - visitors can always refuse to supply personally-identifying - information, with the caveat that it may prevent them from engaging in - certain website-related activities. -

    - -

    Aggregated Statistics

    - -

    - Outline may collect statistics about the behavior of visitors to its - websites. For instance, Outline may monitor the most popular links or - screen the links help identify spam. Outline may display this - information publicly or provide it to others. However, Outline does - not disclose personally-identifying information other than as - described below. -

    - -

    Protection of Certain Personally-Identifying Information

    - -

    - Outline discloses potentially personally-identifying and - personally-identifying information only to those of its employees, - contractors and affiliated organizations that (i) need to know that - information in order to process it on Outline’s behalf or to provide - services available at Outline’s websites, and (ii) that have agreed - not to disclose it to others. Some of those employees, contractors and - affiliated organizations may be located outside of your home country; - by using Outline’s websites, you consent to the transfer of such - information to them. Outline will not rent or sell potentially - personally-identifying and personally-identifying information to - anyone. Other than to its employees, contractors and affiliated - organizations, as described above, Outline discloses potentially - personally-identifying and personally-identifying information only in - response to a subpoena, court order or other governmental request, or - when Outline believes in good faith that disclosure is reasonably - necessary to protect the property or rights of Outline, third parties - or the public at large. -

    -

    - If you are a registered user of an Outline website and have supplied - your email address, Outline may occasionally send you an email to tell - you about new features, solicit your feedback, or just keep you up to - date with what’s going on with Outline and our products. We primarily - use our various product blogs to communicate this type of information, - so we expect to keep this type of email to a minimum. If you send us a - request (for example via a support email or via one of our feedback - mechanisms), we reserve the right to publish it in order to help us - clarify or respond to your request or to help us support other users. - Outline takes all measures reasonably necessary to protect against the - unauthorized access, use, alteration or destruction of potentially - personally-identifying and personally-identifying information. -

    - -

    Cookies

    -

    - A cookie is a string of information that a website stores on a - visitor’s computer, and that the visitor’s browser provides to the - website each time the visitor returns. Outline uses cookies to help - Outline identify and track visitors, their usage of Outline website, - and their website access preferences. Outline visitors who do not wish - to have cookies placed on their computers should set their browsers to - refuse cookies before using Outline’s websites, with the drawback that - certain features of Outline’s websites may not function properly - without the aid of cookies. -

    - -

    Business Transfers

    -

    - If Outline, or substantially all of its assets, were acquired, or in - the unlikely event that Outline goes out of business or enters - bankruptcy, user information would be one of the assets that is - transferred or acquired by a third party. You acknowledge that such - transfers may occur, and that any acquirer of Outline may continue to - use your personal information as set forth in this policy. -

    - -

    Privacy Policy Changes

    -

    - Although most changes are likely to be minor, Outline may change its - Privacy Policy from time to time, and in Outline’s sole discretion. - Outline encourages visitors to frequently check this page for any - changes to its Privacy Policy. Your continued use of this site after - any change in this Privacy Policy will constitute your acceptance of - such change. -

    - -
    -

    - - CC BY-SA 2.5. Modified from{' '} - Automattic Privacy Policy - -

    -
    -
    - ); -} diff --git a/server/pages/components/Layout.js b/server/pages/components/Layout.js index 3e5514cf..c10fde62 100644 --- a/server/pages/components/Layout.js +++ b/server/pages/components/Layout.js @@ -3,7 +3,6 @@ import * as React from 'react'; import { Helmet } from 'react-helmet'; import styled from 'styled-components'; import breakpoint from 'styled-components-breakpoint'; -import { TopNavigation, BottomNavigation } from './Navigation'; import Analytics from './Analytics'; import GlobalStyles from '../../../shared/styles/globals'; import prefetchTags from '../../utils/prefetchTags'; @@ -66,11 +65,7 @@ function Layout({ children, loggedIn, sessions }: Props) { {'{{HEAD}}'} {'{{CSS}}'} - - - {children} - - + {children} ); } diff --git a/server/pages/components/Navigation.js b/server/pages/components/Navigation.js deleted file mode 100644 index 60b59de5..00000000 --- a/server/pages/components/Navigation.js +++ /dev/null @@ -1,263 +0,0 @@ -// @flow -import * as React from 'react'; -import { sortBy } from 'lodash'; -import styled from 'styled-components'; -import breakpoint from 'styled-components-breakpoint'; -import Centered from './Centered'; -import OutlineLogo from '../../../shared/components/OutlineLogo'; -import TeamLogo from '../../../shared/components/TeamLogo'; -import { fadeAndScaleIn } from '../../../shared/styles/animations'; -import { - developers, - changelog, - pricing, - about, - integrations, - privacy, - githubUrl, - twitterUrl, - spectrumUrl, -} from '../../../shared/utils/routeHelpers'; - -type Sessions = { - [subdomain: string]: { - name: string, - logoUrl: string, - expires: string, - url: string, - }, -}; - -type Props = { - sessions: ?Sessions, - loggedIn: boolean, -}; - -function TopNavigation({ sessions, loggedIn }: Props) { - const orderedSessions = sortBy(sessions, 'name'); - - return ( - - ); -} - -function BottomNavigation() { - return ( - -
    - GitHub -
    -
    - Twitter -
    -
    - Spectrum -
    -
    - Privacy -
    -
    - About -
    -
    - ); -} - -const MenuLinkStyle = props => ` - font-size: 15px; - font-weight: 500; - - a { - color: rgba(0, 0, 0, 0.6); - } - - a:hover { - color: rgba(0, 0, 0, 0.4); - text-decoration: underline; - } -`; - -const MenuItem = styled.li` - position: relative; - display: inline-block; - margin: 0 0 0 40px; - - &:first-child { - margin-left: 0; - } - - ${MenuLinkStyle}; - - ${props => - props.highlighted && - ` - position: relative; - border: 2px solid rgba(0, 0, 0, 0.6); - border-radius: 4px; - padding: 6px 8px; - margin-top: -6px; - margin-bottom: -6px; - - &:hover { - border: 2px solid rgba(0, 0, 0, 0.4); - - > a { - color: rgba(0, 0, 0, 0.4); - } - } - - > a:hover { - text-decoration: none; - } - `}; - - &:hover ol { - animation: ${fadeAndScaleIn} 200ms ease; - display: block; - } -`; - -const MenuItemDesktop = styled(MenuItem)` - display: none; - - ${breakpoint('tablet')` - display: inline-block; - `}; -`; - -const Menu = styled.ul` - margin: 0; - padding: 0; - list-style: none; - - ol { - display: none; - position: absolute; - margin: 0; - padding: 0; - right: 0; - top: 34px; - - background: #fff; - border-radius: 4px; - min-width: 160px; - padding: 0 0.5em; - box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 4px 8px rgba(0, 0, 0, 0.08), - 0 2px 4px rgba(0, 0, 0, 0.08); - - ${MenuItem} { - padding: 0.5em 0; - margin: 0; - } - - ${MenuItem} a { - display: flex; - align-items: center; - } - - ${TeamLogo} { - margin-right: 0.5em; - } - } -`; - -const Nav = styled(Centered)` - display: flex; - padding: 20px 0; - align-items: center; - justify-content: space-between; -`; - -const BottomNav = styled.nav` - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - margin: 4em 0; - - > div { - display: flex; - margin: 0 0 40px 0; - ${MenuLinkStyle}; - } - - ${breakpoint('tablet')` - flex-direction: row; - margin: 0 0 4em; - - > div { - margin: 0 0 0 40px; - - &:first-child { - margin: 0; - } - } - `}; -`; - -const Brand = styled.a` - display: flex; - align-items: center; - font-weight: 600; - font-size: 20px; - text-decoration: none; - color: ${props => props.theme.black}; -`; - -export { TopNavigation, BottomNavigation }; diff --git a/server/pages/integrations/Integration.js b/server/pages/integrations/Integration.js deleted file mode 100644 index 3d5f9b9d..00000000 --- a/server/pages/integrations/Integration.js +++ /dev/null @@ -1,46 +0,0 @@ -// @flow -import * as React from 'react'; -import Grid from 'styled-components-grid'; -import PageTitle from '../components/PageTitle'; -import Markdown from '../components/Markdown'; -import Header from '../components/Header'; -import Content from '../components/Content'; -import Menu from './Menu'; -import integrations from './content'; - -type TIntegration = { - slug: string, - name: string, - url: string, - description: string, -}; - -type Props = { - integration: TIntegration, - content: string, -}; - -export default function Integration({ integration, content }: Props) { - return ( - - -
    -

    {integration.name} Integration

    -

    {integration.description}

    -
    - - - - - - - - - - - - ); -} diff --git a/server/pages/integrations/Menu.js b/server/pages/integrations/Menu.js deleted file mode 100644 index 87428cc7..00000000 --- a/server/pages/integrations/Menu.js +++ /dev/null @@ -1,57 +0,0 @@ -// @flow -import * as React from 'react'; -import styled from 'styled-components'; -import { map, groupBy } from 'lodash'; - -type Props = { - integrations: *, - active: string, -}; - -export default function IntegrationMenu({ integrations, active }: Props) { - const categories = groupBy(integrations, i => i.category); - - return ( - - ); -} - -const MenuItem = styled.a` - display: flex; - align-items: center; - font-size: 16px; - font-weight: ${props => (props.active ? '600' : 'inherit')}; - color: ${props => props.theme.text}; -`; - -const Logo = styled.img` - user-select: none; - height: 18px; - border-radius: 2px; - margin-right: 8px; -`; - -const List = styled.ul` - list-style: none; - margin: 0; - padding: 0; -`; diff --git a/server/pages/integrations/airtable.md b/server/pages/integrations/airtable.md deleted file mode 100644 index ebe3c505..00000000 --- a/server/pages/integrations/airtable.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a share link to an [Airtable](https://airtable.com) table and it will be immediately converted into an interactive, live embed. - -Embedding a table in your knowledge base will stay upto date with your original data source automatically. - -![Airtable Outline Integration](/images/screenshots/airtable.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/codepen.md b/server/pages/integrations/codepen.md deleted file mode 100644 index f6edae4f..00000000 --- a/server/pages/integrations/codepen.md +++ /dev/null @@ -1,5 +0,0 @@ -In an Outline document, paste a share link to a [Codepen](https://codepen.io) card and it will be immediately converted into an embedded version where you can view the source or the result. - -Pen's can be anything from a simple code snippet, to an embedded 3D graphic, visualization and more. - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/content.json b/server/pages/integrations/content.json deleted file mode 100644 index 219b01f7..00000000 --- a/server/pages/integrations/content.json +++ /dev/null @@ -1,128 +0,0 @@ -[ - { - "slug": "abstract", - "name": "Abstract", - "url": "https://abstract.com", - "category": "Design", - "description": "One place to version, manage, and collaborate" - }, - { - "slug": "figma", - "name": "Figma", - "url": "https://figma.com", - "category": "Design", - "description": "Figma is a collaborative interface design tool" - }, - { - "slug": "framer", - "name": "Framer", - "url": "https://framer.com", - "category": "Design", - "description": "Framer is an interactive design and prototyping tool" - }, - { - "slug": "invision", - "name": "InVision", - "url": "https://invision.com", - "category": "Design", - "description": "InVision is an online design and prototyping tool" - }, - { - "slug": "marvel", - "name": "Marvel", - "url": "https://marvelapp.com", - "category": "Design", - "description": "The all-in-one platform powering design" - }, - { - "slug": "airtable", - "name": "Airtable", - "url": "https://airtable.com", - "category": "Collaboration", - "description": "Part spreadsheet, part database, and entirely flexible" - }, - { - "slug": "lucidchart", - "name": "Lucidchart", - "url": "https://lucidchart.com", - "category": "Collaboration", - "description": "Create flowcharts and technical diagrams with ease" - }, - { - "slug": "mindmeister", - "name": "Mindmeister", - "url": "https://mindmeister.com", - "category": "Collaboration", - "description": "Interactive and embeddable mind maps" - }, - { - "slug": "miro", - "name": "Miro", - "url": "https://miro.com", - "category": "Collaboration", - "description": "Simple whiteboarding for cross-functional team collaboration" - }, - { - "slug": "slack", - "name": "Slack", - "url": "https://slack.com", - "category": "Collaboration", - "description": "Chat, collaboration, and file sharing for teams" - }, - { - "slug": "trello", - "name": "Trello", - "url": "https://trello.com", - "category": "Collaboration", - "description": "Boards, lists, and cards to organize your projects" - }, - { - "slug": "typeform", - "name": "Typeform", - "url": "https://typeform.com", - "category": "Collaboration", - "description": "Data collection tool and surveys, for professionals" - }, - { - "slug": "prezi", - "name": "Prezi", - "url": "https://prezi.com", - "category": "Collaboration", - "description": "Easy presentations for people who aren't designers" - }, - { - "slug": "codepen", - "name": "Codepen", - "url": "https://codepen.io", - "category": "Developers", - "description": "A social development environment and editor" - }, - { - "slug": "github-gist", - "name": "GitHub Gist", - "url": "https://gist.github.com", - "category": "Developers", - "description": "Sharable code snippets, hosted by GitHub" - }, - { - "slug": "mode-analytics", - "name": "Mode Analytics", - "url": "https://modeanalytics.com", - "category": "Developers", - "description": "Connect and analyze data from any data source" - }, - { - "slug": "numeracy", - "name": "Numeracy", - "url": "https://numeracy.io", - "category": "Developers", - "description": "A SQL pad for writing, iterating, and exploring data" - }, - { - "slug": "zapier", - "name": "Zapier", - "url": "https://zapier.com", - "category": "Developers", - "description": "Connect apps and automate workflows" - } -] \ No newline at end of file diff --git a/server/pages/integrations/figma.md b/server/pages/integrations/figma.md deleted file mode 100644 index 407a3168..00000000 --- a/server/pages/integrations/figma.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a link to a [Figma](https://figma.com) design and we will instantly convert it to an interactive, live preview. - -Because Figma is an online design tool you can see design work happening in realtime, right within Outline. Embed design specs, product designs, or marketing materials easily. - -![Figma Outline Integration](/images/screenshots/figma.png) - -> This integration works without any additional settings or authentication. \ No newline at end of file diff --git a/server/pages/integrations/framer.md b/server/pages/integrations/framer.md deleted file mode 100644 index 1d9ea984..00000000 --- a/server/pages/integrations/framer.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a link to a [Framer](https://framer.com) design or prototype hosted on Framer Cloud and it will be instantly turned into an interactive, live preview. - -Host your prototypes, designs, and mocks inside Outline to document your product or design system. [Learn more about sharing links](https://blog.framer.com/framer-cloud-access-d6bdb192510d) with Framer cloud. - -![Framer Outline Integration](/images/screenshots/framer.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/github-gist.md b/server/pages/integrations/github-gist.md deleted file mode 100644 index 696256d0..00000000 --- a/server/pages/integrations/github-gist.md +++ /dev/null @@ -1,5 +0,0 @@ -In an Outline document, paste a link to a public [Gist](https://gist.github.com) and it will be immediately converted into an embedded version. Embedding code in your knowledge base is a great way to document best practices. - -Outline also supports native code blocks, simply start a line with three backticks (```) to create a code block with syntax highlighting. - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/index.js b/server/pages/integrations/index.js deleted file mode 100644 index 3c74ed3d..00000000 --- a/server/pages/integrations/index.js +++ /dev/null @@ -1,75 +0,0 @@ -// @flow -import * as React from 'react'; -import { map, groupBy } from 'lodash'; -import styled from 'styled-components'; -import Grid from 'styled-components-grid'; -import PageTitle from '../components/PageTitle'; -import Header from '../components/Header'; -import Content from '../components/Content'; -import integrations from './content'; - -const categories = groupBy(integrations, i => i.category); - -function Integrations() { - return ( - - -
    -

    Integrations

    -

    - Outline is designed to integrate with your existing workflow and - tools. -

    -
    - - {map(categories, (integrations, category) => ( -
    -

    {category}

    - - {integrations.map(i => ( - - - -

    {i.name}

    -

    {i.description}

    -
    -
    - ))} -
    -
    - ))} -
    -
    - ); -} - -const Logo = styled.img` - height: 60px; - border-radius: 4px; -`; - -const Category = styled(Grid)` - margin: 0 -1em; -`; - -const Integration = styled.a` - display: block; - padding: 2em 2em 1em; - margin: 1em; - border-radius: 4px; - border: 2px solid ${props => props.theme.slateLight}; - color: ${props => props.theme.text}; - font-size: 16px; - transition: background 200ms ease-in-out; - - h3, - p { - margin: 0.5em 0; - } - - &:hover { - background: ${props => props.theme.slateLight}; - } -`; - -export default Integrations; diff --git a/server/pages/integrations/invision.md b/server/pages/integrations/invision.md deleted file mode 100644 index a05b9826..00000000 --- a/server/pages/integrations/invision.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a share link to an [InVision](https://invision.com) prototype and it will be immediately converted into an interactive, live embed. - -Embedding prototypes in your knowledge base is a great way to create product specs or document user feedback. [Learn more about sharing links](https://support.invisionapp.com/hc/en-us/sections/200697249-Sharing-Prototypes) from InVision. - -![InVision Outline Integration](/images/screenshots/invision.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/lucidchart.md b/server/pages/integrations/lucidchart.md deleted file mode 100644 index 56040c6c..00000000 --- a/server/pages/integrations/lucidchart.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a share link to a [Lucidchart](https://lucidchart.com) diagram or chart and it will be immediately converted into an interactive embedded version. - -Embed diagrams in your knowledge base to commuicate flows, technical diagrams, and more alongside your written documentation - -![Lucidchart Outline Integration](/images/screenshots/lucidchart.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/marvel.md b/server/pages/integrations/marvel.md deleted file mode 100644 index 04e70916..00000000 --- a/server/pages/integrations/marvel.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a share link to a [Marvel](https://marvelapp.com) prototype and it will be immediately converted into an interactive, live embed. - -Embedding prototypes in your knowledge base is a great way to create product specs with engineers or document user feedback. - -![Marvel Outline Integration](/images/screenshots/marvel.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/mindmeister.md b/server/pages/integrations/mindmeister.md deleted file mode 100644 index cb2bef14..00000000 --- a/server/pages/integrations/mindmeister.md +++ /dev/null @@ -1,5 +0,0 @@ -In an Outline document, paste a link to a public [Mindmeister](https://mindmeister.com) mind map or embed link and it will be converted into an interactive, embedded map – right inside your document. - -![Mindmeister Outline Integration](/images/screenshots/mindmeister.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/mode-analytics.md b/server/pages/integrations/mode-analytics.md deleted file mode 100644 index affa5060..00000000 --- a/server/pages/integrations/mode-analytics.md +++ /dev/null @@ -1,3 +0,0 @@ -In an Outline document, paste a link to a public [Mode Analytics](https://modeanalytics.com) report and it will be converted into an interactive, embedded graph or table. Embedded graphs are perfect for communicating business metrics and KPI's. - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/numeracy.md b/server/pages/integrations/numeracy.md deleted file mode 100644 index 51d7b86f..00000000 --- a/server/pages/integrations/numeracy.md +++ /dev/null @@ -1,5 +0,0 @@ -In an Outline document, paste a link to any [Numeracy](https://numeracy.co) chart and it will be converted into an interactive, embedded chart or table. Embedding graphs are perfect for communicating business metrics and KPI's. - -![Numeracy Outline Integration](/images/screenshots/numeracy.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/prezi.md b/server/pages/integrations/prezi.md deleted file mode 100644 index 6d54c365..00000000 --- a/server/pages/integrations/prezi.md +++ /dev/null @@ -1,7 +0,0 @@ -In an Outline document, paste a link to a shared [Prezi](https://prezi.com) presentation and it will be automatically converted into an embedded preview like the one below… - -[Learn more about sharing a Prezi](https://support.prezi.com/hc/en-us/articles/360003498633). - -![Prezi Integration](/images/screenshots/prezi.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/slack.md b/server/pages/integrations/slack.md deleted file mode 100644 index e7512189..00000000 --- a/server/pages/integrations/slack.md +++ /dev/null @@ -1,20 +0,0 @@ -## Sign In with Slack - -Sign In with Slack means your team doesn't have to worry about invites, passwords, or managing new team members. Everyone on your team can login with their existing Slack account and will automatically join your private knowledgebase. - -> Note: Your team will also get a matching custom subdomain that you can link to from elsewhere. - - -## Search your Knowledgebase - -Optionally [Connect to Slack](https://www.getoutline.com/settings/integrations/slack) to enable the `/outline` slack command. Once enabled, team members can easily search your wiki from within Slack by typing `/outline search term`, and post results directly back to the Slack channel. - -![Slack Search Integration](/images/screenshots/slack-search.png) - -## Notifications - -Outline can optionally post into any Slack #channel when documents are created or edited. You can also choose to route notifications based on the Collection. - -![Slack Channel Integration](/images/screenshots/slack-channel.png) - -> To setup channel notifications head to [your integration settings](https://www.getoutline.com/settings/integrations/slack) in the Outline admin diff --git a/server/pages/integrations/trello.md b/server/pages/integrations/trello.md deleted file mode 100644 index fcd0bcfb..00000000 --- a/server/pages/integrations/trello.md +++ /dev/null @@ -1,5 +0,0 @@ -In an Outline document, paste a share link to a [Trello](https://trello.com) card and it will be immediately converted into an embedded preview. - -Embed trello cards in your knowledge base to commuicate roadmap items, ideas, and more alongside your written documentation. Not sure how? [Learn more about sharing from Trello](https://help.trello.com/article/824-sharing-links-to-cards-and-boards). - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/typeform.md b/server/pages/integrations/typeform.md deleted file mode 100644 index d44aef07..00000000 --- a/server/pages/integrations/typeform.md +++ /dev/null @@ -1,5 +0,0 @@ -In an Outline document, paste a share link to a [Typeform survey](https://typeform.com) and it will be immediately converted into an embedded version of the survey. All you have to do is share the doc and wait for responses to roll in. - -![Typeform Outline Integration](/images/screenshots/typeform.png) - -> This integration works without any additional settings or authentication. diff --git a/server/pages/integrations/zapier.md b/server/pages/integrations/zapier.md deleted file mode 100644 index 71a9df11..00000000 --- a/server/pages/integrations/zapier.md +++ /dev/null @@ -1,6 +0,0 @@ -[Zapier](https://zapier.com) allows easy integration with hundreds of other business services and tools – hook into events from Outline such as document creation to trigger actions elsewhere. Or automatically create documents in Outline from events in other tools your team uses. - -**The Zapier integration is currently in early access**, to use the integration and hook up to your knowledge base simply accept the public invite below. All configuration is done within Zapier itself. - -> Setup on Zapier here: [Public Zapier Invite](https://zapier.com/platform/public-invite/5927/a0b2747dbb017723b55fc54f4f0cdcae) - diff --git a/server/routes.js b/server/routes.js index ccbc10be..31c306ae 100644 --- a/server/routes.js +++ b/server/routes.js @@ -1,7 +1,5 @@ // @flow import * as React from 'react'; -import fs from 'fs-extra'; -import { find } from 'lodash'; import path from 'path'; import Koa from 'koa'; import Router from 'koa-router'; @@ -16,13 +14,7 @@ import { NotFoundError } from './errors'; import { Team } from './models'; import Home from './pages/Home'; -import About from './pages/About'; import Changelog from './pages/Changelog'; -import Privacy from './pages/Privacy'; -import Pricing from './pages/Pricing'; -import Integrations from './pages/integrations'; -import integrations from './pages/integrations/content'; -import Integration from './pages/integrations/Integration'; import Developers from './pages/developers'; import Api from './pages/developers/Api'; import SubdomainSignin from './pages/SubdomainSignin'; @@ -62,28 +54,8 @@ if (process.env.NODE_ENV === 'production') { } // static pages -router.get('/about', ctx => renderpage(ctx, )); -router.get('/pricing', ctx => renderpage(ctx, )); router.get('/developers', ctx => renderpage(ctx, )); router.get('/developers/api', ctx => renderpage(ctx, )); -router.get('/privacy', ctx => renderpage(ctx, )); -router.get('/integrations/:slug', async ctx => { - const slug = ctx.params.slug; - const integration = find(integrations, i => i.slug === slug); - if (!integration) { - return ctx.redirect(`${process.env.URL}/integrations`); - } - - const content = await fs.readFile( - path.resolve(__dirname, `pages/integrations/${slug}.md`) - ); - - return renderpage( - ctx, - - ); -}); -router.get('/integrations', ctx => renderpage(ctx, )); router.get('/changelog', async ctx => { const data = await fetch( `https://api.github.com/repos/outline/outline/releases?access_token=${process diff --git a/server/routes.test.js b/server/routes.test.js index f4dd5b9f..3fdf84dc 100644 --- a/server/routes.test.js +++ b/server/routes.test.js @@ -13,7 +13,7 @@ describe('#index', async () => { const res = await server.get('/'); const html = await res.text(); expect(res.status).toEqual(200); - expect(html.includes('Your team’s knowledge base')).toEqual(true); + expect(html.includes('Our team’s knowledge base')).toEqual(true); }); it('should render app if there is an accessToken', async () => { diff --git a/shared/utils/routeHelpers.js b/shared/utils/routeHelpers.js index bb364666..849bd46c 100644 --- a/shared/utils/routeHelpers.js +++ b/shared/utils/routeHelpers.js @@ -57,10 +57,6 @@ export function features(): string { return `${process.env.URL}/#features`; } -export function pricing(): string { - return `${process.env.URL}/pricing`; -} - export function developers(): string { return `${process.env.URL}/developers`; } @@ -73,18 +69,6 @@ export function signin(service: string = 'slack'): string { return `${process.env.URL}/auth/${service}`; } -export function about(): string { - return `${process.env.URL}/about`; -} - -export function integrations(): string { - return `${process.env.URL}/integrations`; -} - -export function privacy(): string { - return `${process.env.URL}/privacy`; -} - export function settings(): string { return `/settings`; }