Skip to content

Commit f9dd68e

Browse files
Jimmy LeeJimmy Lee
Jimmy Lee
authored and
Jimmy Lee
committed
statement of work supports optional IP clauses
1 parent 2a86119 commit f9dd68e

File tree

4 files changed

+71
-11
lines changed

4 files changed

+71
-11
lines changed

components/Page.tsx

+10-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface PageProps {
99
title: string;
1010
description: string;
1111
url: string;
12+
isNotOpenSourceExample?: boolean;
1213
children?: React.ReactNode;
1314
}
1415

@@ -42,13 +43,15 @@ export default function Page(props: PageProps) {
4243
</Head>
4344
<img className={styles.pixel} src="https://intdev-global.s3.us-west-2.amazonaws.com/template-app-icon.png" alt="" />
4445
{props.children}
45-
<div className={styles.prompt}>
46-
This is an open source example. Take the code and remix it! <br />
47-
<br />
48-
<SmallButton href={source} target="_blank">
49-
View source
50-
</SmallButton>
51-
</div>
46+
{!props.isNotOpenSourceExample ? (
47+
<div className={styles.prompt}>
48+
This is an open source example. Take the code and remix it! <br />
49+
<br />
50+
<SmallButton href={source} target="_blank">
51+
View source
52+
</SmallButton>
53+
</div>
54+
) : null}
5255
</>
5356
);
5457
}

next-env.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
/// <reference types="next/navigation-types/compat/navigation" />
44

55
// NOTE: This file should not be edited
6-
// see https://nextjs.org/docs/basic-features/typescript for more information.
6+
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.

pages/examples/features/statement-of-work/[id].tsx

+47-3
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,12 @@ function ExampleSOW(props) {
5656
maintenance: props.data.service_maintenance,
5757
launch: props.data.service_launch,
5858
embedding: props.data.service_embedding,
59+
property_handoff: props.data.service_property_handoff,
5960
};
6061

6162
return (
6263
<Page
64+
isNotOpenSourceExample
6365
title={`wireframes.internet.dev ➝ features ➝ SOW ${props.id}`}
6466
description={`This Statement of Work (“SOW”) is between ${supplier.name} (“${supplier.shorthand}”) and the client listed below (“Client”).`}
6567
url={`https://wireframes.internet.dev/examples/features/statement-of-work/${props.id}`}
@@ -237,8 +239,8 @@ function ExampleSOW(props) {
237239
<section className={Utilities.classNames(styles.serviceColumn)}></section>
238240
<section className={Utilities.classNames(styles.serviceColumn, styles.right)}>4.4.2. Collaborative Sessions</section>
239241
<section className={styles.serviceRemainder}>
240-
{supplier.shorthand} will hold discovery meetings to meet with the Client, understand goals and requirements for the project, and provide recommendations on technical
241-
approach, design, and development process while producing deliverables through Figma.
242+
{supplier.shorthand} will hold discovery meetings with the Client to understand project goals and requirements, and to provide recommendations on the technical
243+
approach, design, and development process. Deliverables will be produced using Figma, GitHub, or other agreed-upon software.
242244
</section>
243245
</section>
244246

@@ -253,7 +255,7 @@ function ExampleSOW(props) {
253255

254256
<section className={Utilities.classNames(styles.row, !services.development ? styles.inactive : null)}>
255257
<section className={Utilities.classNames(styles.serviceColumn)}></section>
256-
<section className={Utilities.classNames(styles.serviceColumn, styles.right)}>4.4.4. Holistic Web Development</section>
258+
<section className={Utilities.classNames(styles.serviceColumn, styles.right)}>4.4.4. Holistic Software Development</section>
257259
<section className={styles.serviceRemainder}>
258260
{supplier.shorthand} will use code and services to implement the entire design and provide instructions for Client for how to run and manage the deliverables
259261
themselves.
@@ -360,6 +362,48 @@ function ExampleSOW(props) {
360362
</section>
361363
</section>
362364

365+
{services.property_handoff ? (
366+
<>
367+
<section className={styles.row} style={{ marginTop: 24 }}>
368+
<section className={Utilities.classNames(styles.column, styles.shaded)}>7. Intellectual Property</section>
369+
<section className={Utilities.classNames(styles.column, styles.subshaded)}>7.1. Ownership of Work Product</section>
370+
<section className={styles.remainder}>
371+
Upon delivery of the final work product as described in this SOW (“Work Product”), {supplier.name} (“{supplier.shorthand}”) hereby assigns to {client.name} all
372+
rights, title, and interest in and to the specific intellectual property created solely for {client.name} as part of the Work Product. This assignment is limited to
373+
the copyrights, patents, and any other intellectual property rights directly arising from the Work Product and does not include any broader rights beyond those
374+
necessary for {client.name} to fully use and benefit from the Work Product.
375+
</section>
376+
</section>
377+
<section className={styles.row}>
378+
<section className={Utilities.classNames(styles.column, styles.shaded)}></section>
379+
<section className={Utilities.classNames(styles.column, styles.subshaded)}>7.2. Scope of Assignment</section>
380+
<section className={styles.remainder}>
381+
The assignment shall cover the specific code, designs, and assets created by {supplier.name} (“{supplier.shorthand}”) for {client.name} as part of the Work Product
382+
under this agreement. {supplier.name} (“{supplier.shorthand}”) agrees to permanently relinquish any claim, ownership, or rights to use, copy, distribute, modify, or
383+
otherwise exploit the assigned Work Product.
384+
</section>
385+
</section>
386+
<section className={styles.row}>
387+
<section className={Utilities.classNames(styles.column, styles.shaded)}></section>
388+
<section className={Utilities.classNames(styles.column, styles.subshaded)}>7.3. Right to Derivative Works</section>
389+
<section className={styles.remainder}>
390+
{supplier.name} (“{supplier.shorthand}”) retains the right to create derivative works and engage in projects within the same or related domains or technologies,
391+
provided that no direct reuse of the specific code, documentation, or materials created and assigned to {client.name} takes place. While the Work Product itself is
392+
assigned to {client.name}, it is acknowledged that similarities in architecture, structure, concepts, or methodologies may occur between the Work Product and other
393+
works by {supplier.name} (“{supplier.shorthand}”).
394+
</section>
395+
</section>
396+
<section className={styles.row}>
397+
<section className={Utilities.classNames(styles.column, styles.shaded)}></section>
398+
<section className={Utilities.classNames(styles.column, styles.subshaded)}>7.4. Moral Rights and Waiver</section>
399+
<section className={styles.remainder}>
400+
{supplier.name} (“{supplier.shorthand}”) agrees to waive any moral rights or equivalent rights under applicable laws, to the fullest extent permissible by law, in
401+
the Work Product, and shall not make any claims or take any actions based on moral rights in relation to the assigned Work Product.
402+
</section>
403+
</section>
404+
</>
405+
) : null}
406+
363407
<Title style={{ marginTop: 48 }}>Notice</Title>
364408
<Text style={{ marginTop: 16 }}>
365409
If you are signing on behalf of your company, you represent and warrant that you:

pages/examples/features/statement-of-work/index.tsx

+13
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ function ExampleStatementOfWorks(props) {
146146
service_maintenance: each.data.service_maintenance,
147147
service_launch: each.data.service_launch,
148148
service_embedding: each.data.service_embedding,
149+
service_property_handoff: each.data.service_property_handoff,
149150
});
150151
}}
151152
onDelete={async () => {
@@ -377,6 +378,18 @@ function ExampleStatementOfWorks(props) {
377378
>
378379
You team will engage proactively in your preferred communication channels, seamlessly integrating with your team as if we were full-time staff members.
379380
</Checkbox>
381+
382+
<Checkbox
383+
name="service_property_handoff"
384+
onChange={(e) => {
385+
setUpdates({ ...updates, [e.target.name]: e.target.checked });
386+
}}
387+
value={updates.service_property_handoff}
388+
style={{ marginTop: 8 }}
389+
>
390+
All IP will be handed off.
391+
</Checkbox>
392+
380393
<InputLabel style={{ marginTop: 64 }}>2. Our incorporation state</InputLabel>
381394
<Input
382395
autoComplete="off"

0 commit comments

Comments
 (0)