Skip to content

Commit

Permalink
Merge pull request #2 from funnelmink/white-label-initial
Browse files Browse the repository at this point in the history
White label
  • Loading branch information
JarWarren authored Jul 17, 2024
2 parents a5240fb + 3490b91 commit 940defa
Show file tree
Hide file tree
Showing 89 changed files with 614 additions and 678 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
170 changes: 8 additions & 162 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,170 +1,16 @@

<br>
<p align="center">
<a href="https://www.twenty.com">
<img src="./packages/twenty-website/public/images/core/logo.svg" width="100px" alt="Twenty logo" />
<a href="https://www.funnelmink.com">
<img src="./packages/twenty-front/public/icons/ios/192.png" width="100px" alt="Funnelmink logo" />
</a>
</p>

<h2 align="center" >The #1 Open-Source CRM </h3>
<p align="center">Tailored to your unique business needs</p>
# Funnelmink
SMB-Friendly fork of Twenty CRM

<p align="center"><a href="https://twenty.com">🌐 Website</a> · <a href="https://twenty.com/developers">📚 Documentation</a> · <a href="https://discord.gg/cx5n4Jzs57"><img src="./packages/twenty-website/public/images/readme/discord-icon.svg" width="12" height="12"/> Discord</a> · <a href="https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty"><img src="./packages/twenty-website/public/images/readme/figma-icon.png" width="12" height="12"/> Figma</a><p>
<br />


<p align="center">
<a href="https://www.twenty.com">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/preview-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/preview-light.png">
<img src="./packages/twenty-docs/static/img/preview-light.png" alt="Companies view" />
</picture>
</a>
</p>
<br>

We’ve spent thousands of hours grappling with traditional CRMs like Pipedrive and Salesforce to align them with our business needs, only to end up frustrated — customizations are complex and the closed ecosystems of these platforms can feel restrictive.

We felt the need for a CRM platform that empowers rather than constrains. We believe the next great CRM will come from the open-source community. We’ve packed Twenty with powerful features to give you full control and help you run your business efficiently.

<br>

# Demo
Go to <a href="https://demo.twenty.com/">demo.twenty.com</a> and login with the following credentials:
## Demo
Go to <a href="https://demo.funnelmink.com/">demo.funnelmink.com</a> and login with the following credentials:
```
email: noah@demo.dev
email: tim@apple.dev
password: Applecar2025
```

See also:
🚀 [Self-hosting](https://twenty.com/developers/section/self-hosting)
🖥️ [Local Setup](https://twenty.com/developers/local-setup)

# Why Choose Twenty?
We understand that the CRM landscape is vast. So why should you choose us?

⛓️ **Full control, Full Freedom:** Contribute, self-host, fork. Break free from vendor lock-in and join us in shaping the open future of CRM.

📊 **Data, Your Way:** The days when the role of CRM platforms was to shift manual data entries to a database are over. Now, the data is already there. CRM 2.0 should be built around your data, allowing you to access and visualize any existing sources, not forcing you to retrofit your data into predefined objects on a remote cloud.

🎨 **Effortlessly Intuitive:** We set out to create something that we ourselves would always enjoy using. The main application draws inspiration from Notion, a tool known for its user-friendly interface and customization capabilities.
<br>


<br>

# What You Can Do With Twenty
We're currently in the development phase of Twenty's alpha version.

Please feel free to flag any specific need you have need by creating an issue.

Below are some features we have implemented to date:

+ [Add, filter, sort, edit, and track customers](#add-filter-sort-edit-and-track-customers)
+ [Create one or several opportunities for each company](#create-one-or-several-opportunities-for-each-company)
+ [See rich notes tasks displayed in a timeline](#see-rich-notes-tasks-displayed-in-a-timeline)
+ [Create tasks on records](#create-tasks-on-records)
+ [Navigate quickly through the app using keyboard shortcuts and search](#navigate-quickly-through-the-app-using-keyboard-shortcuts-and-search)

## Add, filter, sort, edit, and track customers:

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/index-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/index-light.png">
<img src="./packages/twenty-docs/static/img/visualise-customer-light.png" alt="Companies view" />
</picture>
</p>

## Create one or several opportunities for each company:

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/kanban-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/kanban-light.png">
<img src="./packages/twenty-docs/static/img/follow-your-deals-light.png" alt="Companies view" />
</picture>
</p>

## Track deals effortlessly with the email integration:

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/emails-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/emails-light.png">
<img src="./packages/twenty-docs/static/img/rich-notes-light.png" alt="Companies view" />
</picture>
</p>

## Tailor your data model to meet business needs:

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/data-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/data-light.png">
<img src="./packages/twenty-docs/static/img/rich-notes-light.png" alt="Companies view" />
</picture>
</p>

## See rich notes displayed in a timeline:

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/notes-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/notes-light.png">
<img src="./packages/twenty-docs/static/img/rich-notes-light.png" alt="Companies view" />
</picture>
</p>

## Create tasks on records

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/tasks-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/tasks-light.png">
<img src="./packages/twenty-docs/static/img/create-tasks-light.png" alt="Companies view" />
</picture>
</p>

## Navigate quickly through the app using keyboard shortcuts and search:

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/keyboard-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/keyboard-light.png">
<img src="./packages/twenty-docs/static/img/shortcut-navigation-light.png" alt="Companies view" />
</picture>
</p>

## Connect your CRM to all your tools through our APIs and Webhooks.

<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/api-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/twentyhq/twenty/v0.12.0/packages/twenty-docs/static/img/api-light.png">
<img src="./packages/twenty-docs/static/img/shortcut-navigation-light.png" alt="Companies view" />
</picture>
</p>

<br>

# What's In Store

Here’s what you can look forward to:

**Frequent updates:** We’re shipping fast! Expect regular updates and new features that enhance your experience.

🔗 **Extensibility:** We’re putting the power in your hands. Soon, you’ll have the tools to extend and customize Twenty with plugins and more.

<br>

# Join the Community

- Star the repo
- Join [discussions](https://github.com/twentyhq/twenty/discussions) and track [issues](https://github.com/twentyhq/twenty/issues)
- Follow us on [Twitter](https://twitter.com/twentycrm) or [LinkedIn](https://www.linkedin.com/company/twenty/)
- Join our [Discord](https://discord.gg/cx5n4Jzs57)
- [Contributions](https://github.com/twentyhq/twenty/contribute) are, of course, most welcome!


```
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@
"yarn": ">=4.0.2"
},
"license": "AGPL-3.0",
"name": "twenty",
"name": "funnelmink",
"packageManager": "[email protected]",
"resolutions": {
"graphql": "16.8.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/twenty-chrome-extension/loading.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<meta charset="UTF-8" />
<link rel="icon" href="/icons/android/android-launchericon-48-48.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Twenty</title>
<title>Funnelmink</title>
</head>
<body>
<div id="app"></div>
Expand Down
2 changes: 1 addition & 1 deletion packages/twenty-chrome-extension/page-inaccessible.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<meta charset="UTF-8" />
<link rel="icon" href="/icons/android/android-launchericon-48-48.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Twenty</title>
<title>Funnelmink</title>
</head>
<body>
<div id="app"></div>
Expand Down
2 changes: 1 addition & 1 deletion packages/twenty-chrome-extension/sidepanel.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<meta charset="UTF-8" />
<link rel="icon" href="/icons/android/android-launchericon-48-48.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Twenty</title>
<title>Funnelmink</title>
<style>
/* Reset margin and padding */
html, body {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ export const createDefaultButton = (

span.textContent = buttonText;
img.src =
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACb0lEQVR4nO2VO4taQRTHr3AblbjxEVlwCwVhg7BoqqCIjy/gAyyFWNlYBOxsfH0KuxgQGwXRUkGuL2S7i1barGAgiwbdW93SnGOc4BonPiKahf3DwXFmuP/fPM4ZlvmlTxAhCBdzHnEQWYiv7Mr4C3NeuVYhQYDPzOUUQgDLBQGcLHNhvQK8DACPx8PTxiqVyvISG43GbyaT6Qfpn06n0m63e/tPAPF4vJ1MJu8kEsnWTCkWi1yr1RKGw+GDRqPBOTfr44vFQvD7/Q/lcpmaaVQAr9fLp1IpO22c47hGOBz+MB6PH+Vy+VYDAL8qlUoGtVotzOfzq4MAgsHgE/6KojiQyWR/bKVSqbSszHFM8Pl8z1YK48JsNltCOBwOnrYLO+8AAIjb+nHbycoTiUQfDJ7tFq4YAHiVSmXBxcD41u8flQU8z7fhzO0r83atVns3Go3u9Xr9x0O/RQXo9/tsIBBg6vX606a52Wz+bZ7P5/WwG29gxSJzhKgA6XTaDoFNF+krFAocmC//4yWEcSf2wTm7mCO19xFgSsKOLI16vV7b7XY7mRNoLwA0JymJ5uQIzgIAuX5PzDElT2m+E8BqtQ4ymcx7Yq7T6a6ZE4sKgOadTucaCwkxp1UzlEKh0GDxIXOwDWHAdi6Xe3swQDQa/Q7mywoolUpvsaptymazDWKxmBHTlWXZm405BFZoNpuGgwEmk4mE2SGtVivii4f1AO7J3ZopkQCQj7Ar1FeRChCJRJzVapX6DKNIfSc1Ax+wtQWQ55h6bH8FWDfYV4fO3wlwDr0C/BcADYiTPCxHqIEA2QsCZAkAKnRGkMbKN/sTX5YHPQ1e7SkAAAAASUVORK5CYII=';
'data:image/png;base64,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';
img.height = 16;
img.width = 16;
img.alt = 'Twenty logo';
img.alt = 'Funnelmink logo';

// Write universal styles for the button
const divStyles = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export const insertButtonForCompany = async () => {
const company = await checkIfCompanyExists();

const openCompanyOnSidePanel = (companyId: string) => {
companyButtonSpan.textContent = 'View in Twenty';
companyButtonSpan.textContent = 'View in Funnelmink';
companyButtonDiv.onClickHandler(async () => {
await changeSidePanelUrl(`/object/company/${companyId}`);
chrome.runtime.sendMessage({ action: 'openSidepanel' });
Expand All @@ -111,7 +111,7 @@ export const insertButtonForCompany = async () => {
if (isDefined(company.id)) openCompanyOnSidePanel(company.id);
} else {
await changeSidePanelUrl(`/objects/companies`);
companyButtonSpan.textContent = 'Add to Twenty';
companyButtonSpan.textContent = 'Add to Funnelmink';

companyButtonDiv.onClickHandler(async () => {
companyButtonSpan.textContent = 'Saving...';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ export const insertButtonForPerson = async () => {
const person = await checkIfPersonExists();

const openPersonOnSidePanel = (personId: string) => {
personButtonSpan.textContent = 'View in Twenty';
personButtonSpan.textContent = 'View in Funnelmink';
personButtonDiv.onClickHandler(async () => {
await changeSidePanelUrl(`/object/person/${personId}`);
chrome.runtime.sendMessage({ action: 'openSidepanel' });
Expand All @@ -121,7 +121,7 @@ export const insertButtonForPerson = async () => {
if (isDefined(person.id)) openPersonOnSidePanel(person.id);
} else {
await changeSidePanelUrl(`/objects/people`);
personButtonSpan.textContent = 'Add to Twenty';
personButtonSpan.textContent = 'Add to Funnelmink';
personButtonDiv.onClickHandler(async () => {
personButtonSpan.textContent = 'Saving...';
const personId = await addPerson();
Expand Down
Loading

0 comments on commit 940defa

Please sign in to comment.