Skip to content

Commit

Permalink
Merge pull request #211 from swsrkty/kukkee-to-samay
Browse files Browse the repository at this point in the history
Renaming kukkee to samay
  • Loading branch information
anandbaburajan authored Jan 23, 2024
2 parents 8b1338d + 793677d commit c303173
Show file tree
Hide file tree
Showing 25 changed files with 128 additions and 136 deletions.
4 changes: 2 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# In production, NEXT_MONGODB_URI is the connection string
# In development, NEXT_MONGODB_URI is mongodb://localhost:27017/kukkeePolls
# In development, NEXT_MONGODB_URI is mongodb://localhost:27017/samayPolls
NEXT_MONGODB_URI=

# In production, NEXT_PUBLIC_BASE_URL is the base URL of your deployment; like https://www.kukkee.com
# In production, NEXT_PUBLIC_BASE_URL is the base URL of your deployment; like https://samay.app
# In development, NEXT_PUBLIC_BASE_URL is http://localhost:3000
NEXT_PUBLIC_BASE_URL=

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Contributing

Hi there! We're thrilled that you'd like to contribute to Kukkee!
Hi there! We're thrilled that you'd like to contribute to Samay!

## Issues and PRs

Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022 Kukkee
Copyright (c) 2022 Samay

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
30 changes: 15 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
<div align="center">
<a href="https://www.kukkee.com/">
<a href="https://samay.app/">
<img
src="./public/favicon.svg"
alt="Kukkee Logo"
alt="Samay Logo"
height="64"
/>
</a>
<p>
<b>
Kukkee — free and open source meeting poll tool
Samay — free and open source meeting poll tool
</b>
</p>
<p>

[![License](https://img.shields.io/github/license/Kukkee/Kukkee?color=%23000000&style=for-the-badge)](https://github.com/Kukkee/Kukkee/blob/main/LICENSE)
[![Polls created: 2500+](https://shields.io/badge/style-2500+-black?&style=for-the-badge&label=Polls%20created)](https://kukkee.com/)
[![Create a poll](https://shields.io/badge/style-Now-black?&style=for-the-badge&label=Create%20a%20poll)](https://kukkee.com/)
[![License](https://img.shields.io/github/license/samayapp/samay?color=%23000000&style=for-the-badge)](https://github.com/samayapp/samay/blob/main/LICENSE)
[![Polls created: 2500+](https://shields.io/badge/style-2500+-black?&style=for-the-badge&label=Polls%20created)](https://samay.app/)
[![Create a poll](https://shields.io/badge/style-Now-black?&style=for-the-badge&label=Create%20a%20poll)](https://samay.app/)

</p>
<br/>
</div>

Kukkee is a free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!
Samay is a free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!

- Create a meeting poll by choosing the time slots based on your availability.
- Copy and share the poll link with the participants to let them mark their availability.
- Find the most popular times and see who's free with "yes" votes - or who can be - with "if need be" votes, and book the meeting!

Create a poll now at [Kukkee.com](https://kukkee.com/)!
Create a poll now at [Samay.app](https://samay.app/)!

## Motivation

After my GSoC '20 at LiberTEM, I wanted to have a video call with my mentors. They said yes, and since the next step was to find a suitable and common time, one of them sent me a link to a meeting poll created using a proprietary online service. It had surprisingly bad UX and was covered with advertisements. I searched for good, free and open source meeting poll tools, but didn't find any. So I decided to fix that problem.

## Get in touch

If you have suggestions for how Kukkee could be improved, please add your thoughts on a relevant discussion [here](https://github.com/Kukkee/Kukkee/discussions/) or start a new discussion. If you have any questions, I'd love to hear them too! If you want to report an issue, check if the issue is already opened [here](https://github.com/AnandBaburajan/Kukkee/issues) otherwise open a new one.
If you have suggestions for how Samay could be improved, please add your thoughts on a relevant discussion [here](https://github.com/samayapp/samay/discussions/) or start a new discussion. If you have any questions, I'd love to hear them too! If you want to report an issue, check if the issue is already opened [here](https://github.com/samayapp/samay/issues) otherwise open a new one.

## Self-hosting

Expand All @@ -45,7 +45,7 @@ Coming soon!

### Vercel and MongoDB Atlas

Kukkee is built with MongoDB and Next.js, so for a quick and free setup, you can use a free MongoDB Atlas cluster and Vercel's hobby plan.
Samay is built with MongoDB and Next.js, so for a quick and free setup, you can use a free MongoDB Atlas cluster and Vercel's hobby plan.

You can get started with MongoDB Atlas for free [here](https://www.mongodb.com/basics/mongodb-atlas-tutorial). Make sure to add all IP addresses (0.0.0.0/0) to the IP access list of your Atlas cluster since it is not possible to determine the IP addresses of Vercel deployments.

Expand All @@ -67,13 +67,13 @@ First, make sure you have [Node.js](https://nodejs.org/en/) and [MongoDB](https:
1. Fork this repo to your own GitHub account and then clone it.

```sh
git clone https://github.com/<your-username>/Kukkee.git
git clone https://github.com/<your-username>/samay.git
```

2. Go to the project folder

```sh
cd Kukkee
cd samay
```

3. Create a new branch:
Expand Down Expand Up @@ -110,9 +110,9 @@ First, make sure you have [Node.js](https://nodejs.org/en/) and [MongoDB](https:

## Acknowledgements

Thanks to FOSS United for selecting Kukkee as one of the [winning projects](https://forum.fossunited.org/t/foss-hack-3-0-results/1882) at FOSS Hack 3.0.
Thanks to FOSS United for selecting Samay as one of the [winning projects](https://forum.fossunited.org/t/foss-hack-3-0-results/1882) at FOSS Hack 3.0.

Thanks to these amazing projects which help power Kukkee:
Thanks to these amazing projects which help power Samay:

- React-big-calendar
- React
Expand All @@ -126,4 +126,4 @@ Thanks to these amazing projects which help power Kukkee:

## License

Kukkee is distributed under the [MIT License](https://github.com/AnandBaburajan/Kukkee/blob/main/LICENSE).
Samay is distributed under the [MIT License](https://github.com/samayapp/samay/blob/main/LICENSE).
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "kukkee",
"name": "samay",
"description": "Free and open source meeting poll tool",
"version": "2.0.0",
"scripts": {
Expand All @@ -10,7 +10,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/AnandBaburajan/Kukkee.git"
"url": "https://github.com/samayapp/samay.git"
},
"license": "MIT",
"dependencies": {
Expand Down
8 changes: 4 additions & 4 deletions pages/api/poll/[id].ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import KukkeePoll, { Vote, PollDoc } from "../../../src/models/poll";
import SamayPoll, { Vote, PollDoc } from "../../../src/models/poll";
import { isTimePresentInPollTimes } from "../../../src/helpers";
import connectToDatabase from "../../../src/utils/db";

Expand All @@ -17,7 +17,7 @@ export default async (
case "GET":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
}).lean();
if (!poll) {
Expand All @@ -32,7 +32,7 @@ export default async (
case "PUT":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
});
if (poll) {
Expand Down Expand Up @@ -60,7 +60,7 @@ export default async (
},
];
}
const updatedPoll: PollDoc | null = await KukkeePoll.findOneAndUpdate(
const updatedPoll: PollDoc | null = await SamayPoll.findOneAndUpdate(
{ _id: id },
{ votes: newVotes },
{ new: true }
Expand Down
10 changes: 5 additions & 5 deletions pages/api/poll/[id]/[secret].ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import KukkeePoll, { PollDoc } from "../../../../src/models/poll";
import SamayPoll, { PollDoc } from "../../../../src/models/poll";
import connectToDatabase from "../../../../src/utils/db";

export default async (
Expand All @@ -16,15 +16,15 @@ export default async (
case "PUT":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
}).lean();
if (poll) {
if (poll.secret !== secret) {
res.status(403).json({ message: "Forbidden" });
} else {
try {
const updatedPoll: PollDoc | null = await KukkeePoll.findOneAndUpdate(
const updatedPoll: PollDoc | null = await SamayPoll.findOneAndUpdate(
{ _id: id },
JSON.parse(body),
{ new: true }
Expand All @@ -44,15 +44,15 @@ export default async (
case "DELETE":
try {
await connectToDatabase();
const poll: PollDoc | null = await KukkeePoll.findOne({
const poll: PollDoc | null = await SamayPoll.findOne({
_id: id,
}).lean();
if (poll) {
if (poll.secret !== secret) {
res.status(403).json({ message: "Forbidden" });
} else {
try {
const deletedPoll = await KukkeePoll.findByIdAndRemove(id);
const deletedPoll = await SamayPoll.findByIdAndRemove(id);
res.status(200).json(deletedPoll);
} catch (err) {
res.status(400).json({ message: err.message });
Expand Down
4 changes: 2 additions & 2 deletions pages/api/poll/create.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextApiRequest, NextApiResponse } from "next";
import KukkeePoll, { PollDoc } from "../../../src/models/poll";
import SamayPoll, { PollDoc } from "../../../src/models/poll";
import connectToDatabase from "../../../src/utils/db";

export default async (
Expand All @@ -12,7 +12,7 @@ export default async (
case "POST":
try {
await connectToDatabase();
const newPoll: PollDoc = new KukkeePoll(JSON.parse(body));
const newPoll: PollDoc = new SamayPoll(JSON.parse(body));
await newPoll.save();
res.status(201).json(newPoll);
} catch (err) {
Expand Down
22 changes: 11 additions & 11 deletions pages/how-to.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,37 +9,37 @@ const HowTo = (): JSX.Element => {
return (
<>
<Head>
<title>Kukkee — How-to</title>
<title>Samay — How-to</title>
<link rel="shortcut icon" href="/favicon.svg" />
<meta charSet="UTF-8" />
<meta name="robots" content="noindex" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="title" content="Kukkee — Meeting poll tool" />
<meta name="title" content="Samay — Meeting poll tool" />
<meta
name="description"
content="Here's how to get started with Kukkee - a free and open source meeting poll tool."
content="Here's how to get started with Samay - a free and open source meeting poll tool."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kukkee.com" />
<meta property="og:title" content="Kukkee — Meeting poll tool" />
<meta property="og:url" content="https://samay.app" />
<meta property="og:title" content="Samay — Meeting poll tool" />
<meta
property="og:description"
content="Here's how to get started with Kukkee - a free and open source meeting poll tool."
content="Here's how to get started with Samay - a free and open source meeting poll tool."
/>
<meta property="og:image" content="/banner.png" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://kukkee.com" />
<meta property="twitter:title" content="Kukkee — Meeting poll tool" />
<meta property="twitter:url" content="https://samay.app" />
<meta property="twitter:title" content="Samay — Meeting poll tool" />
<meta
property="twitter:description"
content="Here's how to get started with Kukkee - a free and open source meeting poll tool."
content="Here's how to get started with Samay - a free and open source meeting poll tool."
/>
<meta property="twitter:image" content="/banner.png" />
</Head>
<Layout>
<Container className="how-to-container">
<span className="how-to-features title">
Kukkee — free and open source meeting poll tool
Samay — free and open source meeting poll tool
</span>
<span className="how-to-features desc">
Quickly find a time which works for everyone without the
Expand Down Expand Up @@ -71,7 +71,7 @@ const HowTo = (): JSX.Element => {
<CheckCircleFill className="how-to-card icon-yes" /> (yes) or{" "}
<CircleFill className="how-to-card icon-if-need-be" /> (if
need be) votes. No login required. No time zone confusion
since Kukkee automatically shows participants times in their
since Samay automatically shows participants times in their
local time zone.
</Card.Text>
</Card.Body>
Expand Down
34 changes: 17 additions & 17 deletions pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import toastOptions from "../src/helpers/toastOptions";
import Layout from "../src/components/Layout";
import { encrypt } from "../src/helpers";
import { Time, Poll } from "../src/models/poll";
import KukkeeRBC from "../src/components/KukkeeRBC";
import SamayRBC from "../src/components/SamayRBC";
import { createPoll } from "../src/utils/api/server";

const Home = (): JSX.Element => {
Expand Down Expand Up @@ -76,10 +76,10 @@ const Home = (): JSX.Element => {

if (createPollResponse.statusCode === 201) {
if (typeof window !== "undefined") {
const kukkeeCreatedPolls = localStorage.getItem("kukkeeCreatedPolls");
const samayCreatedPolls = localStorage.getItem("samayCreatedPolls");

if (!kukkeeCreatedPolls) {
const initKukkeeCreatedPolls = {
if (!samayCreatedPolls) {
const initSamayCreatedPolls = {
polls: [
{
[`${createPollResponse.data._id}-${pollTitle}`]: `${encryptedSecret}`,
Expand All @@ -88,19 +88,19 @@ const Home = (): JSX.Element => {
};

localStorage.setItem(
"kukkeeCreatedPolls",
JSON.stringify(initKukkeeCreatedPolls)
"samayCreatedPolls",
JSON.stringify(initSamayCreatedPolls)
);
} else {
let kukkeeCreatedPollsJSON = JSON.parse(kukkeeCreatedPolls);
let samayCreatedPollsJSON = JSON.parse(samayCreatedPolls);

kukkeeCreatedPollsJSON.polls.push({
samayCreatedPollsJSON.polls.push({
[`${createPollResponse.data._id}-${pollTitle}`]: `${encryptedSecret}`,
});

localStorage.setItem(
"kukkeeCreatedPolls",
JSON.stringify(kukkeeCreatedPollsJSON)
"samayCreatedPolls",
JSON.stringify(samayCreatedPollsJSON)
);
}
}
Expand All @@ -121,26 +121,26 @@ const Home = (): JSX.Element => {
return (
<>
<Head>
<title>Kukkee — Meeting poll tool</title>
<title>Samay — Meeting poll tool</title>
<link rel="shortcut icon" href="/favicon.svg" />
<meta charSet="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="title" content="Kukkee — Meeting poll tool" />
<meta name="title" content="Samay — Meeting poll tool" />
<meta
name="description"
content="Free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!"
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://kukkee.com" />
<meta property="og:title" content="Kukkee — Meeting poll tool" />
<meta property="og:url" content="https://samay.app" />
<meta property="og:title" content="Samay — Meeting poll tool" />
<meta
property="og:description"
content="Free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!"
/>
<meta property="og:image" content="/banner.png" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://kukkee.com" />
<meta property="twitter:title" content="Kukkee — Meeting poll tool" />
<meta property="twitter:url" content="https://samay.app" />
<meta property="twitter:title" content="Samay — Meeting poll tool" />
<meta
property="twitter:description"
content="Free and open source meeting poll tool. Quickly find a time which works for everyone without the back-and-forth texts/emails!"
Expand All @@ -151,7 +151,7 @@ const Home = (): JSX.Element => {
<div className="global-page-section">
<Container className="global-container">
<Jumbotron className="new-poll-timeslot-jumbo">
<KukkeeRBC pollTimes={pollTimes} setTimes={setTimes} />
<SamayRBC pollTimes={pollTimes} setTimes={setTimes} />
</Jumbotron>
<Jumbotron className="new-poll-jumbo">
<Row>
Expand Down
Loading

0 comments on commit c303173

Please sign in to comment.