To solve Bob's problem, we need to maximize his profit under two constraints: the time constraint (500 minutes per week) and the product constraint (300 total cups per week). Let's denote the number of cups of coffee as \(C\) and the number of cups of tea as \(T\).

The objective function to maximize is the total profit, given by \(P = 1C + 2T\), since Bob makes a profit of $1 on each cup of coffee and $2 on each cup of tea.

The constraints are:
1. Time constraint: \(5C + 3T \leq 500\), because it takes 5 minutes to make a cup of coffee and 3 minutes to make a cup of tea, and Bob has 500 minutes available.
2. Product constraint: \(C + T \leq 300\), since Bob can only make up to 300 cups in total.

Additionally, \(C \geq 0\) and \(T \geq 0\), because the number of cups cannot be negative.

Now, let's write the Gurobi code for this problem:

```python
from gurobipy import *

# Create a new model
m = Model("Coffee_Tea_Problem")

# Define variables
C = m.addVar(name="Cups_of_Coffee", vtype=GRB.CONTINUOUS, lb=0)
T = m.addVar(name="Cups_of_Tea", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(1*C + 2*T, GRB.MAXIMIZE)

# Add constraints
m.addConstr(5*C + 3*T <= 500, name="Time_Constraint")
m.addConstr(C + T <= 300, name="Product_Constraint")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Cups of Coffee: {C.x}")
    print(f"Cups of Tea: {T.x}")
    print(f"Total Profit: ${1*C.x + 2*T.x:.2f}")
else:
    print("No optimal solution found")
```